DEV Community

Cover image for PHP-FPM sem o pool padrão www.conf: como desabilitar com segurança em ambiente multiusuário
Marcos Vilela
Marcos Vilela

Posted on

PHP-FPM sem o pool padrão www.conf: como desabilitar com segurança em ambiente multiusuário

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

2. Configurado o NGINX para usar o novo socket:

set $php_sock /var/run/php/php8.2-fpm-site_teste.sock;
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Para evitar erros, foi criado um override anulando essas diretivas:

sudo systemctl edit php8.2-fpm
Enter fullscreen mode Exit fullscreen mode

Conteúdo do override:

[Service]
ExecStartPost=
ExecStopPost=
Enter fullscreen mode Exit fullscreen mode

Após isso:

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart php8.2-fpm
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)