Apache 2.4 + PHP-FPM + ProxyPassMatch usando socket Unix

Apache 2.4 + PHP-FPM + ProxyPassMatch usando socket Unix

Intento configurar Apache v2.4 + PHP-FPM + ProxyPassMatch usando un socket Unix.

Usando Debian 9 Stretch, PHP v5.6.37, PHP v7.0.31, Apache v2.4.25.

Mi configuración de virtualhost es la siguiente (000-default.conf):

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName local.lc

    DocumentRoot /var/www

    ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php5.6-fpm.sock|fcgi://localhost/var/www/"

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Ejecuté los siguientes comandos:

sudo apt-get install php7.0-cli php7.0-fpm php-pear libapache2-mod-fcgid
sudo apt install software-properties-common
# add repo to get PHP5
sudo apt-get -y install apt-transport-https lsb-release ca-certificates
sudo curl https://packages.sury.org/php/apt.gpg | apt-key add -
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sudo echo 'deb https://packages.sury.org/php/ stretch main' > /etc/apt/sources.list.d/deb.sury.org.list
sudo apt-get update
sudo apt-get install php5.6-cli php5.6-fpm
sudo apt-get install php7.0 php7.0-fpm
sudo a2enconf php5.6-fpm
sudo systemctl reload apache2
sudo a2dismod php5 php7 php5.6 php7.0 mpm_prefork
sudo a2enmod actions alias proxy_fcgi mpm_worker
sudo systemctl restart apache2 php5.6-fpm php7.0-fpm

Los servidores se reinician después de los cambios usando:

sudo systemctl restart apache2 php5.6-fpm php7.0-fpm

Me sale una página vacía cuando cargo el

http://local.lc/

sitio web en mi computadora de desarrollo basada en Windows. El local.lc está en el archivo "hosts".

Veo lo siguiente en el registro (/var/log/apache2/error.log):

[Tue Aug 28 23:24:26.685004 2018] [mpm_worker:notice] [pid 43104:tid 140487559849152] AH00295: caught SIGTERM, shutting down
[Tue Aug 28 23:24:27.001054 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity for Apache/2.9.1 (http://www.modsecurity.org/) configured.
[Tue Aug 28 23:24:27.001189 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity: APR compiled version="1.5.2"; loaded version="1.5.2"
[Tue Aug 28 23:24:27.001205 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity: PCRE compiled version="8.39 "; loaded version="8.39 2016-06-14"
[Tue Aug 28 23:24:27.001223 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity: LUA compiled version="Lua 5.1"
[Tue Aug 28 23:24:27.001236 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity: YAJL compiled version="2.1.0"
[Tue Aug 28 23:24:27.001248 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity: LIBXML compiled version="2.9.4"
[Tue Aug 28 23:24:27.001498 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity: StatusEngine call: "2.9.1,Apache/2.4.25 (Debian),1.5.2/1.5.2,8.39/8.39 2016-06-14,Lua 5.1,2.9.4,cb"
[Tue Aug 28 23:24:27.135554 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity: StatusEngine call successfully sent. For more information visit: http://status.modsecurity.org/
[Tue Aug 28 23:24:28.005175 2018] [mpm_worker:notice] [pid 43532:tid 139833116394688] AH00292: Apache/2.4.25 (Debian) OpenSSL/1.0.2l mod_fcgid/2.3.9 configured -- resuming normal operations
[Tue Aug 28 23:24:28.005270 2018] [core:notice] [pid 43532:tid 139833116394688] AH00094: Command line: '/usr/sbin/apache2'

No veo nada útil en el registro.

¿Alguna idea de qué puede estar mal?

¿Por qué la página predeterminada no se carga?

Respuesta1

Te falta una DirectoryIndexdirectiva en tu configuración, por lo que cuando solicitas una URL comohttp://local.lc/Apache no sabe qué archivo buscar en el disco y servirlo en lugar de simplemente mostrarle el contenido del directorio (que probablemente no sea lo que desea).

Dado que está utilizando PHP-FPM, espero que configure DirectoryIndexalgo como index.phplo que luego debería ser procesado por PHP-FPM.

Probar PHP-FPM directamente usando algo como la cgi-fcgiutilidad le permitirá omitir Apache en caso de que aún no funcione.

Respuesta2

Al acceder http://local.lc/index.htmlno resultó ninguna página, ni tampoco error en error.log.

Después de solucionar esto con DirectoryIndexla directiva sugerida por @bodgit y cargarla http://local.lc/index.phpahora, se produjo un error en error.log.

Al mirar error.log, vi el siguiente mensaje de error:

No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /var/run/php5.6-fpm.sock (localhost) failed".

Comprobando la /var/run/php5.6-fpm.sockruta no se encontró, pero sí /var/run/php/php5.6-fpm.sockse encontró.

La ruta se corrigió en mi configuración de host virtual de la siguiente manera (000-default.conf):

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName local.lc

    DocumentRoot /var/www

    ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/var/www/"

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Entonces, arreglando la ruta en el archivo de configuración de vhost, luego cargando http://local.lc/index.phpla página, ahora se muestra:

"¡Funciona!".

¡Problema fijo!

información relacionada