
Consegui fazer o FastCGI funcionar com Apache 2.4 no Ubuntu 16.04 adaptando as instruções deeste tópico do askubuntu,este documento HowtoForge, eeste tutorial do Oceano Digital.
Todas essas fontes dizemcriar /etc/apache2/conf-available/php7.0-fpm.conf
e dizer o que colocar nele. Mas depois de instalar php-fpm
, já tenho esse arquivo, com o seguinte conteúdo:
# 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>
Então, em vez disso, criei meu próprio conf e coloquei o código das instruções nele e o habilitei.
Para que serve o existente php7.0-fpm.conf
? Se eu habilitá-lo além da minha configuração, meus sites param de funcionar. Estou preocupado por não estar fazendo isso da maneira pretendida e poder ter problemas no futuro. É realmente difícil encontrar documentação boa e atual sobre isso.
Para referência, aqui está todo o meu procedimento:
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
Conteúdo 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>
Continuação dos comandos:
sudo a2enconf custom-fpm
sudo systemctl restart apache2 && sudo systemctl restart php7.0-fpm
Agradeço antecipadamente por sua ajuda.
Responder1
Eu bati na mesma confusão, sinto sua dor. Depois de muita leitura, ficou claro para mim que a maioria dos artigos está desatualizada e refere-se a métodos anteriores (ou às vezes combinações).
Usando PHP-FPM com configuração integrada do Ubuntu 16.04, vocêapenaspreciso fazer isso:
sudo a2enconf php7.0-fpm
sudo a2enmod proxy proxy_fcgi
Fiz a maior parte do que você fez e removi tudo, quando a configuração personalizada não fazia sentido.
Para que serve o php7.0-fpm.conf existente?
A configuração que você encontrou instalada pelo pacote é para usar mod_proxy_fcgi. Ele vincula arquivos .php via mod_proxy_fcgi ao PHP FPM, usando mod_proxy, por meio de um soquete de domínio Unix. Pelo que sei, esta é a "receita" mais atualizada (das seis já disponíveis!)
Você não precisa instalar libapache2-mod-fastcgi
esse método diferente e antigo. Você não precisa escrever essa configuração - isso é para usar o mod_fastcgi diretamente. Você não precisa instalar actions fastcgi alias
como estão para configurar o mod_fastcgi.
Acho estranho que nenhum dos artigos - mesmo aqueles do Ubuntu 16 - mencione que a nova receita está pronta para você!
Este comentário esclareceu a história para mim:
O método preferido agora é fastcgi, usando uma destas receitas:
(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)
Além disso, este artigo do Apache detalha as três subopções para configurar mod_proxy_fcgi para conectar-se ao FPM, usando ProxyPassMatch ou SetHandler + UDS. Observe que o UDS é desde o Apache 2.4.10 porhttps://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.htmlentão é necessário backports confiáveis ou mais recentes.
https://wiki.apache.org/httpd/PHP-FPM
Então vim visualizar que agora existem seis maneiras de configurá-lo:
Em ordem aproximadamente histórica:
Módulo Apache PHP: mod_php (o jeito antigo)
Via FastCGI - usando a configuração Handler/Action/Alias/FastCgiExternalServer
a. mod_fastcgi
b. mod_fcgid
Usando PHP-FPM via mod_proxy_fcgi, configurado via:
a. Soquete TCP (IP e porta) ProxyPassMatch ... fcgi://127.0.0.1:9000/path/
b. Soquete de domínio Unix (UDS) ProxyPassMatch… unix:/caminho/para/soquete
c. (UDS) via SetHandler "proxy:unix: OR SetHandler "proxy:fcgi:
Isenção de responsabilidade: tudo isso é novo para mim, então provavelmente ainda tenho cinco coisas erradas e dez coisas para aprender.