Apache 2.4 + PHP-FPM + ProxyPassMatch usando soquete Unix

Apache 2.4 + PHP-FPM + ProxyPassMatch usando soquete Unix

Tento configurar o Apache v2.4 + PHP-FPM + ProxyPassMatch usando soquete Unix.

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

Minha configuração de virtualhost é a seguinte (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>

Executei os seguintes 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

Os servidores são reiniciados após alterações usando:

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

Recebo uma página vazia, quando carrego o

http://local.lc/

site no meu computador de desenvolvimento baseado em Windows. O local.lc está no arquivo "hosts".

Vejo o seguinte no log (/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'

Não vejo nada útil no log.

Alguma ideia do que pode estar errado?

Por que a página padrão não está carregando?

Responder1

Está faltando uma DirectoryIndexdiretiva em sua configuração, portanto, ao solicitar uma URL comohttp://local.lc/O Apache não sabe qual arquivo procurar no disco e servir em vez de apenas mostrar o conteúdo do diretório (o que provavelmente não é o que você deseja).

Dado que você está usando PHP-FPM, espero que você defina DirectoryIndexalgo como index.phpqual deve ser processado pelo PHP-FPM.

Testar o PHP-FPM diretamente usando algo como o cgi-fcgiutilitário permitirá que você ignore o Apache caso ele ainda não funcione.

Responder2

O acesso http://local.lc/index.htmlnão resultou em nenhuma página, nem erro no error.log.

Depois de corrigir isso com DirectoryIndexa diretiva sugerida por @bodgit, e carregado http://local.lc/index.phpagora resultou em erro em error.log.

Olhando para o error.log, agora vi a seguinte mensagem de erro:

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

A verificação do /var/run/php5.6-fpm.sockcaminho não foi encontrada, mas /var/run/php/php5.6-fpm.sockfoi encontrada.

O caminho foi corrigido na configuração do meu virtualhost como o seguinte (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>

Portanto, corrigir o caminho no arquivo de configuração do vhost e carregar http://local.lc/index.phpa página agora exibe:

"Funciona!".

Problema resolvido!

informação relacionada