Sono riuscito a far funzionare FastCGI con Apache 2.4 su Ubuntu 16.04 adattando le istruzioni di questo thread di askubuntu, questo documento HowtoForge e questo tutorial di Digital Ocean.
Tutte quelle fonti dicono di creare /etc/apache2/conf-available/php7.0-fpm.conf
e dirti cosa metterci dentro. Ma dopo aver installato php-fpm
, ho già quel file, con i seguenti contenuti:
# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
# Enable http authorization headers
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
</FilesMatch>
<FilesMatch ".+\.phps$">
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
Require all denied
</FilesMatch>
</IfModule>
Quindi ho invece creato la mia conf e ho inserito il codice dalle istruzioni e l'ho abilitato.
Qual è il php7.0-fpm.conf
esistente per? Se lo abilito oltre alla mia conf, i miei siti Web smettono di funzionare. Sono preoccupato di non farlo nel modo in cui dovrebbe essere fatto e di poter avere problemi in futuro. È davvero difficile trovare una buona documentazione aggiornata su questo.
Per riferimento, ecco la mia intera procedura:
sudo apt install libapache2-mod-fastcgi php-fpm
sudo a2dismod php7.0 mpm_prefork
sudo a2enmod actions fastcgi alias mpm_worker
sudoedit /etc/apache2/conf-available/custom-fpm.conf
Contenuto di /etc/apache2/conf-available/custom-fpm.conf
:
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi .php
Action php7-fcgi /php7-fcgi virtual
Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
Comandi continuati:
sudo a2enconf custom-fpm
sudo systemctl restart apache2 && sudo systemctl restart php7.0-fpm
Grazie in anticipo per il tuo aiuto.
Risposta accettata:
Ho colpito la stessa confusione, sento il tuo dolore. Dopo molte letture mi è diventato chiaro che la maggior parte degli articoli non sono aggiornati e si riferiscono a metodi (o talvolta combinazioni) precedenti.
Usando PHP-FPM con la configurazione integrata di Ubuntu 16.04, tu solo devi farlo:
sudo a2enconf php7.0-fpm
sudo a2enmod proxy proxy_fcgi
Ho fatto la maggior parte di quello che hai fatto tu, poi ho rimosso tutto, quando quella configurazione personalizzata non aveva senso.
A cosa serve l'esistente php7.0-fpm.conf?
La configurazione che hai trovato installata dal pacchetto è per l'utilizzo di mod_proxy_fcgi. Collega i file .php tramite mod_proxy_fcgi a PHP FPM, usando mod_proxy, tramite un socket di dominio Unix. Per quanto ne so questa è la “ricetta” più aggiornata (delle sei ora disponibili!)
Non è necessario installare libapache2-mod-fastcgi
questo è un metodo diverso e più vecchio. Non è necessario scrivere quella configurazione, per usare direttamente mod_fastcgi. Non è necessario installare actions fastcgi alias
come sono per configurare mod_fastcgi.
Trovo strano che nessuno degli articoli, nemmeno quelli per Ubuntu 16, menzioni che la nuova ricetta è stata preparata per te!
Questo commento mi ha chiarito la storia:
Il metodo preferito ora è fastcgi, utilizzando una di queste ricette:
(mod_fastcgi, httpd 2.2) http://wiki.apache.org/httpd/php-fastcgi
(mod_fcgid, httpd 2.2) http://wiki.apache.org/httpd/php-fcgid
(mod_proxy_fcgi, httpd 2.4) http://wiki.apache.org/httpd/PHP-FPM
http://php.net/manual/en/install.unix.debian.php#112544 (2013)
Inoltre, questo articolo di Apache descrive in dettaglio le tre opzioni secondarie per configurare mod_proxy_fcgi per la connessione a FPM, utilizzando ProxyPassMatch o SetHandler + UDS. Nota che UDS è a partire da Apache 2.4.10 per https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html, quindi sono necessari trusty-backport o più recenti.
https://wiki.apache.org/httpd/PHP-FPM
Quindi sono arrivato a visualizzare che ora ci sono sei modi per configurarlo:
In ordine più o meno storico:
-
Modulo Apache PHP:mod_php (alla vecchia maniera)
-
Tramite FastCGI – utilizzando la configurazione di Handler/Action/Alias/FastCgiExternalServer
un. mod_fastcgi
b. mod_fcgid
-
Utilizzando PHP-FPM tramite mod_proxy_fcgi, configurato tramite:
un. Socket TCP (IP e porta) ProxyPassMatch … fcgi://127.0.0.1:9000/path/
b. Socket di dominio Unix (UDS) ProxyPassMatch … unix:/percorso/a/socket
c. (UDS) tramite SetHandler “proxy:unix:O SetHandler “proxy:fcgi:
Dichiarazione di non responsabilità:è tutto nuovo per me, quindi probabilmente ho ancora cinque cose che non vanno e dieci cose da imparare.