He logrado que FastCGI funcione con Apache 2.4 en Ubuntu 16.04 adaptando las instrucciones de este hilo de askubuntu, este documento de HowtoForge y este tutorial de Digital Ocean.
Todas esas fuentes dicen que cree /etc/apache2/conf-available/php7.0-fpm.conf
y te digo qué poner en él. Pero después de instalar php-fpm
, ya tengo ese archivo, con el siguiente contenido:
# 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>
Así que, en su lugar, creé mi propia configuración, puse el código de las instrucciones y la habilité.
¿Cuál es el php7.0-fpm.conf
existente? ¿por? Si lo habilito además de mi configuración, mis sitios web dejarán de funcionar. Me preocupa no estar haciendo esto de la forma en que se debe hacer y podría tener problemas en el futuro. Es realmente difícil encontrar buena documentación actual sobre esto.
Como referencia, aquí está mi procedimiento completo:
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
Contenido de /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>
Continuación de los comandos:
sudo a2enconf custom-fpm
sudo systemctl restart apache2 && sudo systemctl restart php7.0-fpm
Gracias de antemano por su ayuda.
Respuesta aceptada:
Me golpeó la misma confusión, siento tu dolor. Después de leer mucho, me quedó claro que la mayoría de los artículos están desactualizados y se refieren a métodos anteriores (o, a veces, a combinaciones).
Usando PHP-FPM con la configuración integrada de Ubuntu 16.04, solo necesito hacer esto:
sudo a2enconf php7.0-fpm
sudo a2enmod proxy proxy_fcgi
Hice la mayor parte de lo que hiciste, luego lo eliminé todo, cuando esa configuración personalizada no tenía sentido.
¿Para qué sirve el php7.0-fpm.conf existente?
La configuración que encontró instalada por el paquete es para usar mod_proxy_fcgi. Vincula archivos .php a través de mod_proxy_fcgi a PHP FPM, usando mod_proxy, a través de un socket de dominio Unix. Hasta donde yo sé, esta es la "receta" más actualizada (¡de las seis disponibles ahora!)
No necesita instalar libapache2-mod-fastcgi
ese es un método diferente, más antiguo. No necesita escribir esa configuración, eso es para usar mod_fastcgi directamente. No necesitas instalar actions fastcgi alias
como son para configurar mod_fastcgi.
¡Me parece extraño que ninguno de los artículos, incluso los de Ubuntu 16, mencionen que la nueva receta está configurada para usted!
Este comentario me aclaró la historia:
El método preferido ahora es fastcgi, usando cualquiera de estas recetas:
(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)
Además, este artículo de Apache detalla las tres subopciones para configurar mod_proxy_fcgi para conectarse a FPM, usando ProxyPassMatch o SetHandler + UDS. Tenga en cuenta que UDS es desde Apache 2.4.10 según https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html, por lo que se necesitan versiones posteriores confiables o más nuevas.
https://wiki.apache.org/httpd/PHP-FPM
Así que he llegado a visualizar que ahora hay seis formas de configurarlo:
En orden histórico aproximado:
-
Módulo Apache PHP:mod_php (a la antigua)
-
A través de FastCGI:usando la configuración de Handler/Action/Alias/FastCgiExternalServer
una. mod_fastcgi
b. mod_fcgid
-
Usando PHP-FPM a través de mod_proxy_fcgi, configurado a través de:
una. Conector TCP (IP y puerto) ProxyPassMatch … fcgi://127.0.0.1:9000/ruta/
b. Socket de dominio Unix (UDS) ProxyPassMatch … unix:/ruta/hacia/socket
C. (UDS) a través de SetHandler “proxy:unix:O SetHandler “proxy:fcgi:
Descargo de responsabilidad:todo esto es nuevo para mí, así que probablemente todavía tengo cinco errores y diez cosas que aprender.