O PHP-FPM (PHP FastCGI Process Manager) é uma alternativa à implementação tradicional do PHP, que oferece melhor desempenho e controle de recursos para sites e aplicações web de alto tráfego.
Neste guia, vamos explorar como configurar e utilizar o PHP-FPM de forma eficiente em sua hospedagem de site.
Como configurar e ativar o PHP-FPM?
Para configurar e ativar o PHP-FPM, siga os seguintes passos:
-
- Acesse o arquivo de configuração do PHP-FPM (geralmente localizado em /etc/php/7.x/fpm/php-fpm.conf ou /etc/php-fpm.conf, a depender da sua distribuição);
- Edite o arquivo para configurar as opções desejadas. Exemplo:
[global] pid = /run/php/php7.4-fpm.pid error_log = /var/log/php7.4-fpm.log daemonize = yes [www] user = www-data group = www-data listen = /run/php/php7.4-fpm.sock listen.owner = www-data listen.group = www-data pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3
-
- Salve as alterações e reinicie o serviço PHP-FPM:
sudo systemctl restart php7.4-fpm
-
- Configure o seu servidor web (como Nginx) para usar o PHP-FPM. No Nginx, adicione as seguintes linhas ao bloco do servidor:
location ~ \.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_index index.php; include fastcgi_params;
-
- Reinicie o servidor web:
sudo systemctl restart nginx
Lembre-se de ajustar as versões e os caminhos conforme a sua configuração específica.
Como utilizar o PHP e PHP-FPM juntos?
O PHP e o PHP-FPM trabalham em conjunto para processar scripts PHP de forma eficiente. Veja como eles interagem:
-
- O servidor web (como Nginx) recebe uma solicitação para um arquivo PHP;
- O servidor web passa a solicitação para o PHP-FPM por meio do socket ou da porta configurada;
- O PHP-FPM gerencia um pool de processos PHP que interpretam e executam o script;
- O resultado é enviado de volta ao servidor web, que o encaminha para o cliente.
Para otimizar o uso conjunto do PHP e PHP-FPM:
-
- Ajuste as configurações do pool de processos (pm.max_children, pm.start_servers, entre outros) com base no tráfego do seu site e nos recursos do servidor;
- Utilize o opcode caching (como OPcache) para melhorar o desempenho;
- Monitore o uso de recursos e ajuste as configurações conforme necessário.
Lista de diretivas
Aqui estão algumas das principais diretivas do PHP-FPM que você pode configurar:
-
- pm: define o modo de gerenciamento de processos (static, dynamic, ondemand);
- pm.max_children: número máximo de processos-filho que podem ser criados;
- pm.start_servers: número de processos-filho criados na inicialização;
- pm.min_spare_servers: número mínimo de processos-filho ociosos;
- pm.max_spare_servers: número máximo de processos-filho ociosos;
- pm.process_idle_timeout: tempo máximo que um processo-filho pode ficar ocioso;
- request_terminate_timeout: tempo máximo de execução de uma requisição;
- request_slowlog_timeout: tempo após uma requisição lenta ser registrada;
- slowlog: caminho para o arquivo de log de requisições lentas.
Para uma lista completa de diretivas, consulte a documentação oficial do PHP-FPM.
O que é PHP-FPM?
PHP-FPM (FastCGI Process Manager) é uma implementação alternativa do PHP FastCGI com recursos adicionais úteis para sites de alto tráfego. Ele fornece melhores opções de gerenciamento de processos PHP e permite um controle mais fino sobre o uso de memória e CPU.
Diferença do PHP para o PHP-FPM
A principal diferença entre o PHP tradicional e o PHP-FPM está na forma como os processos PHP são gerenciados.
-
- PHP tradicional (mod_php):
- PHP-FPM:
Exemplos de uso
Aqui estão alguns exemplos de como o PHP-FPM pode ser usado em diferentes cenários. Confira!
Site de e-commerce de alto tráfego:
[ecommerce] user = ecommerce group = ecommerce listen = /var/run/php/ecommerce.sock pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500
Blog WordPress com tráfego moderado:
[wordpress] user = wordpress group = wordpress listen = 127.0.0.1:9000 pm = ondemand pm.max_children = 20 pm.process_idle_timeout = 10s pm.max_requests = 500
Aplicação PHP com requisitos de memória elevados:
[memory-intensive] user = app group = app listen = /var/run/php/memory-intensive.sock pm = static pm.max_children = 10 php_admin_value[memory_limit] = 256M
Vantagens
O PHP-FPM oferece várias vantagens sobre o PHP tradicional:
-
- Melhor gerenciamento de recursos: controle fino sobre o número de processos PHP e uso de memória;
- Maior desempenho: processamento mais eficiente de solicitações, especialmente em sites de alto tráfego;
- Isolamento de processos: cada pool pode ser executado com diferentes usuários e configurações;
- Reinício gracioso: permite atualizar configurações sem interromper o serviço;
- Melhor integração com servidores web leves: funciona muito bem com Nginx e melhora o desempenho geral do servidor;
- Logs detalhados: oferece logs mais detalhados para solução de problemas e monitoramento;
- Escalabilidade: facilita a escalabilidade horizontal por meio da configuração de múltiplos pools.
Entenda quando não usar o PHP-FPM
Embora o PHP-FPM seja uma excelente opção para muitos cenários, há situações em que pode não ser a melhor escolha:
-
- Servidores com recursos muito limitados: em ambientes com memória e CPU muito restritos, o overhead adicional do PHP-FPM pode não ser justificável;
- Sites com tráfego extremamente baixo: para sites pessoais ou projetos muito pequenos, a configuração adicional pode não valer a pena;
- Ambientes de desenvolvimento simples: para desenvolvimento local rápido, o PHP integrado pode ser suficiente e mais fácil de configurar;
- Compatibilidade com software legado: alguns aplicativos mais antigos podem não ser totalmente compatíveis com o PHP-FPM;
- Quando o mod_php é suficiente: se o seu site funciona bem com mod_php e você não precisa das funcionalidades adicionais do PHP-FPM, pode não haver necessidade de mudança.
Perguntas frequentes
Para que serve o PHP-FPM?
O PHP-FPM serve para gerenciar processos PHP de forma mais eficiente, além de oferecer melhor desempenho e controle de recursos para sites e aplicações web, especialmente aqueles com alto tráfego ou requisitos específicos de recursos.
Como habilitar PHP-FPM?
Para habilitar o PHP-FPM:
-
- Instale o pacote PHP-FPM (ex.: sudo apt-get install php7.4-fpm no Ubuntu);
- Configure o arquivo php-fpm.conf conforme as suas necessidades;
- Inicie o serviço PHP-FPM (sudo systemctl start php7.4-fpm);
- Configure o seu servidor web para usar o PHP-FPM;
- Reinicie o servidor web.
Como deixar o PHP mais rápido?
Para otimizar o desempenho do PHP:
-
- Use PHP-FPM em vez do mod_php tradicional;
- Ative o OPcache para caching de bytecode;
- Utilize um acelerador de PHP como o APCu;
- Otimize as configurações do PHP-FPM (pm.max_children, pm.start_servers, entre outros);
- Implemente caching de aplicação (Redis, Memcached);
- Otimize as suas consultas de banco de dados;
- Use um CDN para conteúdo estático;
- Mantenha o PHP e todas as extensões atualizadas;
- Utilize um servidor web leve como Nginx;
- Implemente compressão GZIP para respostas HTTP.
Lembre-se de que a otimização deve ser feita com base nas necessidades específicas do seu site ou da aplicação. É importante monitorar o desempenho e ajustar as configurações conforme necessário.
Para mais informações sobre como otimizar o seu ambiente PHP, leia também nossos conteúdos sobre: