Vis e3o geral: como o Apache executa PHP
O Apache, por si s f3, n e3o interpreta c f3digo PHP. Para que arquivos .php sejam executados (e n e3o baixados como texto), o Apache precisa encaminhar essas requisi e7 f5es para um interpretador PHP. As duas abordagens mais comuns s e3o:
- mod_php: o interpretador PHP roda dentro do processo do Apache (m f3dulo carregado no servidor web).
- PHP-FPM + proxy_fcgi: o Apache atua como proxy e encaminha requisi e7 f5es PHP para um servi e7o separado (PHP-FPM), via socket Unix ou TCP.
Quando usar mod_php
- Ambientes simples/legados onde o empacotamento do sistema ainda oferece
libapache2-mod-php(Debian/Ubuntu) ou equivalente. - Quando voc ea n e3o precisa de pools separados por site/usu e1rio e quer menos pe e7as para administrar.
Pontos de aten e7 e3o: o Apache tende a ficar acoplado e0 vers e3o do PHP, e em MPM event/worker pode haver restri e7 f5es (muitas distros preferem FPM). Tamb e9m fica mais dif edcil isolar sites com configura e7 f5es/pools diferentes.
Quando usar PHP-FPM (proxy_fcgi)
- Hospedagem com v e1rios sites, necessidade de isolamento por pool, limites de recursos e configura e7 f5es diferentes por aplica e7 e3o.
- Ambientes modernos onde se quer desacoplar o ciclo de vida do PHP do Apache (reiniciar FPM sem reiniciar Apache, trocar vers e3o do PHP com menos impacto).
- Melhor compatibilidade com MPM event/worker e cen e1rios de alto tr e1fego.
Arquivos e pe e7as de configura e7 e3o que voc ea vai encontrar
mod_php (exemplos comuns)
mods-available/php*.loademods-available/php*.conf(Debian/Ubuntu): carregamento do m f3dulo e ajustes.- Diretivas como
SetHandler/AddHandlerpodem aparecer em arquivos do site (VirtualHost) ou em conf global.
PHP-FPM + Apache (proxy_fcgi)
mods-available/proxy_fcgi.loademods-available/proxy_fcgi.conf(m f3dulo que faz o encaminhamento FastCGI).mods-available/proxy.load(depend eancia do proxy).- Config do PHP-FPM: tipicamente em
/etc/php/<vers e3o>/fpm/pool.d/*.conf(Debian/Ubuntu) ou caminhos equivalentes na sua distro. - Socket do FPM: frequentemente algo como
/run/php/php<vers e3o>-fpm.sock(Unix) ou127.0.0.1:9000(TCP).
Laborat f3rio: validar execu e7 e3o com phpinfo()
Este teste serve para confirmar rapidamente se o Apache est e1 executando PHP e por qual m e9todo. Importante: phpinfo() exp f5e muitas informa e7 f5es do ambiente. Use apenas para valida e7 e3o e remova em seguida.
1) Criar o arquivo de teste
No DocumentRoot do seu site, crie um arquivo info.php:
<?php
phpinfo();2) Acessar pelo navegador
Acesse http://SEU_HOST/info.php. O resultado esperado e9 uma p e1gina com informa e7 f5es do PHP. Se o navegador fizer download do arquivo ou mostrar o c f3digo, h e1 problema de handler (ver diagn f3stico mais abaixo).
- Ouça o áudio com a tela desligada
- Ganhe Certificado após a conclusão
- + de 5000 cursos para você explorar!
Baixar o aplicativo
3) Confirmar se e9 mod_php ou FPM
- Se aparecer algo como Server API =
Apache 2.0 Handler, e9 comum ser mod_php. - Se aparecer Server API =
FPM/FastCGI, voc ea est e1 usando PHP-FPM.
4) Remover o arquivo de teste (obrigat f3rio)
Apague info.php assim que terminar a valida e7 e3o.
Configura e7 e3o pr e1tica: PHP-FPM com proxy_fcgi e FilesMatch
A seguir est e1 um padr e3o comum para encaminhar apenas arquivos .php ao PHP-FPM. A ideia e9: quando o Apache encontrar um arquivo que termina com .php, ele usa um handler FastCGI apontando para o socket/porta do FPM.
1) Garantir m f3dulos necess e1rios no Apache
Voc ea precisa de proxy e proxy_fcgi habilitados. Em sistemas Debian/Ubuntu, costuma ser:
sudo a2enmod proxy proxy_fcgi
sudo systemctl reload apache2Em outras distros, a habilita e7 e3o pode ser via arquivo de m f3dulo/carregamento e rein edcio do servi e7o.
2) Conferir o endpoint do PHP-FPM (socket ou TCP)
Verifique como o pool do FPM est e1 configurado (diretiva listen). Exemplos:
- Socket Unix:
listen = /run/php/php8.2-fpm.sock - TCP:
listen = 127.0.0.1:9000
Esse valor e9 o que voc ea vai usar no SetHandler.
3) Configurar o handler no VirtualHost (recomendado)
Dentro do bloco do seu site (VirtualHost), adicione um FilesMatch para .php. Exemplo usando socket Unix:
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost/"
</FilesMatch>Exemplo usando TCP:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>Observa e7 e3o: o trecho fcgi://localhost/ no caso do socket e9 um padr e3o comum para completar a URL do handler; o caminho real do script vem da requisi e7 e3o e do mapeamento do Apache.
4) Recarregar e testar
sudo apachectl configtest
sudo systemctl reload apache2Recrie temporariamente o info.php (se j e1 tiver removido) e teste novamente. Ao final, remova.
Configura e7 e3o pr e1tica: mod_php (vis e3o geral)
Com mod_php, o Apache carrega o m f3dulo do PHP e associa .php ao handler do pr f3prio Apache. Em Debian/Ubuntu, um caminho comum e9 instalar e habilitar o pacote do m f3dulo (ex.: libapache2-mod-php), e o sistema cria/ativa arquivos como php*.load e php*.conf.
Um exemplo conceitual de associa e7 e3o (pode variar por distro/pacote) seria algo como:
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>Na pr e1tica, voc ea normalmente n e3o precisa escrever isso manualmente se o pacote do mod_php j e1 instala a configura e7 e3o padr e3o.
Diagn f3stico: erros t edpicos e como identificar
1) O navegador faz download do .php (ou mostra o c f3digo fonte)
Causa mais comum: o Apache est e1 servindo o arquivo como conte fado est e1tico, sem handler PHP configurado.
- Em FPM: faltou o bloco
FilesMatchcomSetHandler, ou os m f3dulosproxy/proxy_fcgin e3o est e3o habilitados. - Em mod_php: o m f3dulo n e3o est e1 carregado/habilitado, ou voc ea est e1 usando um MPM incompat edvel com a forma como o pacote foi montado.
Como confirmar: verifique o error.log do site e procure mensagens sobre handler desconhecido, m f3dulo ausente ou diretivas ignoradas.
2) Erro 503 Service Unavailable / timeout ao acessar .php (cen e1rio FPM)
Causas comuns:
- PHP-FPM parado ou n e3o respondendo.
- Endpoint incorreto: socket/porta no Apache n e3o bate com o
listendo pool. - Fila/limites do FPM: pool sem workers suficientes, requisi e7 f5es acumulando e estourando timeout.
O que checar:
- Status do servi e7o do FPM e logs do FPM.
- No Apache
error.log, mensagens comoAH01079: failed to make connection to backend,AH01102: error reading status line from remote serverou timeouts. - Se estiver usando TCP, teste conectividade local (ex.:
ss -lntp | grep 9000). Se for socket, verifique se o arquivo existe em/run/php/....
3) Permiss e3o negada no socket do PHP-FPM
Quando o Apache tenta acessar um socket Unix do FPM, ele precisa ter permiss e3o de leitura/escrita no arquivo do socket. Se o socket existir mas o Apache n e3o conseguir acess e1-lo, e9 comum ver erros no Apache semelhantes a (13)Permission denied ao conectar no backend.
O que ajustar (no pool do FPM):
listen.ownerelisten.group: devem permitir que o usu e1rio/grupo do Apache acesse o socket.listen.mode: permiss f5es do arquivo do socket (ex.:0660).
Exemplo (ajuste para o usu e1rio/grupo do seu Apache):
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660Depois, reinicie/recarregue o PHP-FPM para recriar o socket com as permiss f5es corretas.
4) Arquivo existe, mas retorna 404 ou executa o script errado
Em FPM, mapeamento incorreto pode fazer o backend n e3o encontrar o script. Isso pode acontecer se o site tiver aliases/regras e o handler n e3o estiver aplicado no contexto correto.
- Garanta que o
FilesMatchesteja dentro do VirtualHost correto. - Evite aplicar handler globalmente para caminhos que n e3o deveriam executar PHP (por exemplo, diret f3rios de upload).
Recomenda e7 f5es m ednimas para n e3o expor informa e7 f5es sens edveis
- N e3o deixe
info.php(ou qualquer endpoint de diagn f3stico) publicado em produ e7 e3o. - Em caso de necessidade tempor e1ria, restrinja por IP/autentica e7 e3o e remova logo ap f3s o teste.
- Evite exibir erros detalhados para o usu e1rio final (erros devem ir para logs). Ajustes de
display_errorsdevem ser pensados para produ e7 e3o. - N e3o aplique handler PHP em diret f3rios onde usu e1rios possam enviar arquivos (uploads). Garanta que esses diret f3rios n e3o executem scripts.
- Revise permiss f5es do socket/porta do FPM para que apenas o servidor web consiga acessar (evite expor o FPM em rede sem necessidade).