Ambientes de hospedagem multiusuário geralmente requerem separação de processos PHP por site ou cliente. A maneira mais segura de se fazer isso com PHP-FPM é criando pools separados por usuário. No entanto, muitos tutoriais sugerem remover o pool padrão (www.conf
), o que pode quebrar a inicialização do serviço caso você não esteja atento a um detalhe importante.
Neste post, compartilho o troubleshooting realizado em um servidor com PHP 8.2-FPM para desabilitar o pool padrão e manter apenas os pools específicos de clientes. O problema, a causa, a solução — tudo documentado.
O problema
Ao remover o pool padrão www.conf
, o serviço php8.2-fpm
não inicializava.
Sintoma:
sudo systemctl restart php8.2-fpm
# Falha ao iniciar o serviço
A causa
O PHP-FPM exige pelo menos um pool habilitado para que o serviço possa iniciar. Se você apenas remove www.conf
sem garantir outro pool válido em /etc/php/8.2/fpm/pool.d/
, o FPM falha com o erro:
"No pool defined. at least one pool section must be specified in config file"
Fonte: Plesk KB – PHP-FPM fails with "No pool defined"
A solução aplicada
1. Criado um pool de teste para um domínio:
/etc/php/8.2/fpm/pool.d/site_teste.conf
[site_teste]
user = www-siteteste
group = www-siteteste
listen = /run/php/php8.2-fpm-site_teste.sock
listen.owner = nginx
listen.group = nginx
pm = ondemand
pm.max_children = 10
pm.process_idle_timeout = 10s
2. Configurado o NGINX para usar o novo socket:
set $php_sock /var/run/php/php8.2-fpm-site_teste.sock;
3. Desativado o www.conf
:
sudo mv /etc/php/8.2/fpm/pool.d/www.conf /etc/php/8.2/fpm/pool.d/www.conf.disabled
Ajuste adicional: systemd override
O service unit /usr/lib/systemd/system/php8.2-fpm.service
possui comandos ExecStartPost
e ExecStopPost
que fazem referência direta ao www.conf
.
ExecStartPost=-/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.2/fpm/pool.d/www.conf 82
ExecStopPost=-/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/8.2/fpm/pool.d/www.conf 82
Para evitar erros, foi criado um override anulando essas diretivas:
sudo systemctl edit php8.2-fpm
Conteúdo do override:
[Service]
ExecStartPost=
ExecStopPost=
Após isso:
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart php8.2-fpm
Resultado
Com pelo menos um pool personalizado ativo e os comandos do systemd ajustados, o serviço php8.2-fpm
iniciou normalmente, sem processos genéricos php-fpm
rodando como nginx
.
ps -eo user,cmd | grep php-fpm | grep -v grep
Resultado: apenas processos dos pools personalizados, conforme o esperado.
Conclusão
Esse tipo de ajuste é essencial em ambientes com múltiplos clientes para garantir isolamento, segurança e controle de recursos. O ponto crítico é garantir a existência de pelo menos um pool ativo antes de remover o www.conf
, além de ajustar o systemd caso ele tenha referências explícitas ao pool padrão.
Esse procedimento agora pode ser replicado com segurança nas demais versões do PHP-FPM em uso no ambiente.
Top comments (0)