Gerenciador de processos PHP FastCGI – PHP-FPM
O que é PHP-FPM?
PHP-FPM, ou PHP FastCGI Process Manager, é uma implementação do FastCGI para scripts PHP. FastCGI é um protocolo usado para melhorar o desempenho dos servidores web, tratando os pedidos de forma mais eficiente do que o padrão CGI (Common Gateway Interface). Enquanto o CGI cria um novo processo para cada pedido (levando a um alto consumo de recursos), o FastCGI mantém um conjunto de processos de trabalho prontos para lidar com vários pedidos, reduzindo assim a sobrecarga. O PHP-FPM adiciona uma camada de gerenciamento de processos no topo do FastCGI, permitindo recursos como pooling de processos, geração de trabalhadores sob demanda, desligamento gracioso e a capacidade de lidar com ambientes de alto tráfego com facilidade. É agora o manipulador de PHP padrão de facto para muitos servidores web modernos, incluindo NGINX e Apache
Por que usar o PHP-FPM?
- Desempenho melhorado: O PHP-FPM pode lidar com mais pedidos simultâneos com menos recursos, reduzindo a carga do servidor e acelerando os tempos de resposta. Isso é especialmente benéfico para sites ou aplicativos de alto tráfego que sofrem picos repentinos de tráfego.
- Gerenciamento de processos: O PHP-FPM permite uma gestão de processos ajustada, dando-lhe controlo sobre a forma como o PHP trata os pedidos. Ele usa um pool de trabalhadores que pode ser ajustado para se adequar à carga de trabalho esperada, garantindo o uso eficiente dos recursos do servidor.
- Melhor utilização de recursos: Como o PHP-FPM agrupa processos, ele pode atender a várias solicitações usando os mesmos trabalhadores, minimizando a necessidade de criar e encerrar processos continuamente. Isso melhora o uso da memória e a eficiência da CPU.
- Degradação graciosa: Quando configurado corretamente, o PHP-FPM pode degradar graciosamente, reduzindo o número de processos ativos se o servidor ficar sobrecarregado, evitando uma falha completa.
- Recursos avançados: O PHP-FPM inclui recursos avançados como o slow-log para depuração, geração de processos adaptáveis e relatórios de status, que fornecem informações sobre o desempenho e a integridade de seus aplicativos PHP.
Principais caraterísticas do PHP-FPM
- Grupos de processos: O PHP-FPM permite definir vários pools de processos de trabalho PHP. Cada pool pode ser configurado com diferentes definições, permitindo-lhe executar diferentes aplicações PHP com diferentes requisitos de tráfego no mesmo servidor.
- Geração de processos adaptável: O PHP-FPM pode escalar automaticamente o número de processos de trabalho com base nos níveis de tráfego. Ele começa com um número mínimo de trabalhadores e pode aumentar o tamanho do pool quando necessário, sem desperdiçar recursos durante períodos de baixo tráfego.
- Registo lento: A funcionalidade de registo lento no PHP-FPM regista os pedidos que excedem um tempo de execução predefinido. Isso ajuda os desenvolvedores a identificar e resolver gargalos de desempenho em seu código PHP.
- Página de Status: O PHP-FPM fornece uma página de status integrada que fornece informações em tempo real sobre o status do pool, trabalhadores ativos, trabalhadores ociosos e outras métricas que podem ser usadas para monitorar o desempenho.
- Encerramento gracioso: O PHP-FPM pode encerrar processos de forma graciosa, permitindo que as solicitações em andamento sejam concluídas antes do encerramento. Isto evita o encerramento abrupto de scripts em execução, garantindo uma melhor experiência do utilizador.
Como funciona o PHP-FPM
O PHP-FPM funciona como um servidor FastCGI autónomo que está integrado com um servidor Web, como o NGINX ou o Apache, para servir scripts PHP. Quando uma solicitação chega, o servidor web encaminha a solicitação PHP para o serviço PHP-FPM, que gerencia um pool de processos de trabalho para executar o código PHP e enviar o resultado de volta para o servidor web para entrega ao cliente. Aqui está um fluxo simplificado de como o PHP-FPM lida com uma solicitação
- Solicitação do cliente: Um usuário solicita uma página web que contém código PHP.
- Servidor Web recebe a solicitação: O servidor web (NGINX ou Apache) recebe a solicitação e a encaminha para o serviço PHP-FPM usando o protocolo FastCGI.
- O trabalhador PHP-FPM processa a solicitação: Um dos processos de trabalho no pool PHP-FPM lida com a solicitação, executa o script PHP e retorna a saída.
- Resposta enviada de volta: O servidor Web recebe a saída e a envia de volta para o cliente como o HTML renderizado final.
Definindo e configurando o PHP-FPM
Passo 1: Instalando o PHP-FPM
Para a maioria das distribuições Linux, o PHP-FPM pode ser instalado através de gerenciadores de pacotes. Aqui estão os comandos para sistemas comuns:
# For Debian/Ubuntu
sudo apt update
sudo apt install php-fpm
# For CentOS/RHEL
sudo yum install php-fpm
sudo systemctl start php-fpm
Passo 2: Configurando os pools do PHP-FPM
O arquivo de configuração principal para o PHP-FPM é tipicamente localizado em /etc/php/7.x/fpm/pool.d/ ou /etc/php-fpm.d/ dependendo da sua distribuição e versão do PHP. Cada pool é definido no seu próprio ficheiro, normalmente com o nome do website ou aplicação que serve. Eis um exemplo de configuração de uma pool:
[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 = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500
- pm = dinâmico: O gestor de processos pode ajustar dinamicamente o número de processos de trabalho com base na procura.
- pm.max_children: O número máximo de processos de trabalho que podem ser gerados para tratar pedidos.
- pm.start_servers: O número de processos de trabalho que começam quando o PHP-FPM é iniciado.
- pm.min_spare_servers e pm.max_spare_servers: Define o número mínimo e máximo de workers ociosos, permitindo ao PHP-FPM escalar recursos baseado na carga.
- pm.max_requests: O número máximo de requisições que um worker pode manipular antes de ser terminado e substituído. Isso ajuda a prevenir vazamentos de memória em scripts de longa execução.
Etapa 3: Configurando o servidor Web para usar o PHP-FPM
Para o NGINX:
No arquivo de configuração do NGINX (por exemplo, /etc/nginx/sites-available/example.com), configure o PHP-FPM como o manipulador de PHP:
server {
listen 80;
server_name example.com;
root /var/www/html;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
}
Para ativar o PHP-FPM no Apache, certifique-se de que o módulo mod_proxy_fcgi está ativado
sudo a2enmod proxy_fcgi setenvif
Em seguida, atualize a configuração do host virtual do Apache
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
<FilesMatch .php$>
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
</FilesMatch>
</VirtualHost>
Passo 4: Testando a configuração
Depois de configurar o PHP-FPM e seu servidor web, reinicie os serviços para aplicar as alterações:
# For NGINX
sudo systemctl restart nginx
# For Apache
sudo systemctl restart apache2
?php
phpinfo();
?>
Conclusão: Supercharge PHP com AlexHost e PHP-FPM
O PHP-FPM transforma seus aplicativos PHP em máquinas de alto desempenho, e o VPS alimentado por NVMe da AlexHost garante que eles funcionem sem problemas sob cargas pesadas. Instale o PHP-FPM, configure pools e integre com NGINX ou Apache para obter sites rápidos e seguros. Monitorize com páginas de estado, depure com registos lentos e faça cópias de segurança das configurações para segurança. Com o acesso à raiz e o suporte da AlexHost, seus projetos PHP são imparáveis – comece a codificar e escale sem esforço!