O autor selecionou a COVID-19 Relief Fund para receber uma doação como parte do programa Write for DOnations.
O servidor Web Apache HTTP evoluiu através dos anos para trabalhar em diferentes ambientes e resolver diferentes necessidades. Um problema importante que o Apache HTTP tem que resolver, como qualquer servidor Web, é como lidar com diferentes processos para atender a uma requisição de protocolo http. Isso envolve abrir um soquete, processar a requisição, manter a conexão aberta por um determinado período, processar novos eventos que ocorrem através dessa conexão e retornar o conteúdo produzido por um programa criado em uma linguagem específica (como PHP, Perl, ou Python). Essas tarefas são executadas e controladas por um Módulo de Multiprocessamento (MPM).
O Apache HTTP vem com três MPMs diferentes:
O MPM Event é um módulo de multiprocessamento rápido disponível no servidor Web Apache HTTP.
O PHP-FPM é o gerenciador de processos FastCGI para o PHP. O protocolo FastCGI é baseado na Common Gateway Interface (CGI), um protocolo que se encontra entre as aplicações e os servidores Web como o Apache HTTP. Isso permite que os desenvolvedores escrevam aplicações separadamente do comportamento dos servidores Web. Os programas executam os processos deles independentemente e passam o produto ao servidor Web através deste protocolo. Cada nova conexão que necessite de processamento por uma aplicação criará um novo processo.
Ao combinar o MPM Event no Apache HTTP com o PHP FastCGI Process Manager (PHP-FPM) um site pode carregar mais rapidamente e lidar com mais conexões simultâneas ao mesmo tempo em que usa menos recursos.
Neste tutorial, você irá melhorar o desempenho da pilha LAMP, modificando o módulo padrão de multi processamento de pre-fork para event e utilizando o gerenciador de processos PHP-FPM para lidar com código PHP, em vez do mod_php
clássico no Apache HTTP.
Antes de iniciar este guia, será necessário o seguinte:
O Ubuntu herda scripts para habilitar ou desabilitar módulos Apache HTTP de sua distribuição pai, o Debian. Você usará este conjunto de ferramentas neste passo para desativar o módulo Pre-fork e ativar o módulo Event.
Neste passo, você irá parar o Apache HTTP, desativar o módulo PHP 7.2
vinculado ao módulo Pre-fork e, em seguida, desativar o Pre-fork para habilitar o módulo Event imediatamente.
Primeiro, você irá parar o serviço Apache HTTP:
- sudo systemctl stop apache2
Agora, desative o módulo PHP 7.2
, que está relacionado ao módulo Pre-fork:
- sudo a2dismod php7.2
A seguir, desabilite o módulo Pre-fork MPM:
- sudo a2dismod mpm_prefork
Agora, habilite o módulo Event MPM:
- sudo a2enmod mpm_event
Você mudou o MPM de pre-fork para event e removeu a conexão do módulo PHP 7.2
entre o PHP e o Apache HTTP. No próximo passo, você irá instalar o módulo php-fpm
, bem como as bibliotecas relacionadas e módulos de proxy. Você irá configurar o Apache HTTP para que ele também possa se comunicar com o PHP.
Nesta fase, você mudou a maneira como o Apache HTTP processa as conexões, alterando o MPM de Pre-fork para Event. No entanto, ao longo do caminho, você desabilitou o módulo PHP que conectava o Apache HTTP a qualquer programa em execução no PHP.
Neste passo, você irá instalar o processador PHP-FPM para que o Apache HTTP possa ser capaz de processar programas PHP novamente. E você também instalará as bibliotecas de dependências e habilitará os módulos para que ambos possam cooperar sem problemas e com mais rapidez do que antes.
Primeiro, instale o php-fpm
. O seguinte comando instalará o pacote PHP-FPM e habilitará automaticamente o serviço php7.2-fpm
integrado com o systemd, de maneira que o serviço seja iniciado durante o boot:
- sudo apt install php-fpm
Para se comunicar, o Apache HTTP e o PHP precisam de uma biblioteca que habilite esta capacidade. Agora, você irá instalar o libapache2-mod-fcgid
, que é capaz de servir como interface entre programas com servidores Web, e é específico para o Apache HTTP. Esta comunicação acontecerá através de um soquete UNIX.
Instale esta biblioteca:
- sudo apt install libapache2-mod-fcgid
Você instalou o php-fpm
e o libapache2-mod-fcgid
, mas nenhum dos dois está habilitado ainda.
Primeiro, habilite o módulo php-fpm
com o seguinte comando:
- sudo a2enconf php7.2-fpm
Segundo, habilite o módulo de proxy
do Apache HTTP:
- sudo a2enmod proxy
Terceiro, habilite o módulo de proxy
FastCGI no Apache HTTP:
- sudo a2enmod proxy_fcgi
Nota: você pode ler a configuração desta interação entre programas PHP e HTTP através de um soquete UNIX com o seguinte:
- cat /etc/apache2/conf-enabled/php7.2-fpm.conf
Agora tudo está pronto para que você possa iniciar o Apache HTTP. Você fará uma verificação de configuração primeiro:
- sudo apachectl configtest
OutputSyntax OK
Após isso, você pode prosseguir e reiniciar o Apache HTTP, uma vez que ele foi iniciado automaticamente ao instalar a biblioteca FastCGI libapache2-mod-fcgid
:
- sudo systemctl restart apache2
Você instalou o módulo php-fpm
, configurou o Apache HTTP para funcionar com ele, habilitou os módulos necessários para que o protocolo FastCGI funcione e iniciou os serviços correspondentes.
Agora que o Apache possui o módulo Event MPM habilitado e o PHP-FPM está presente e em execução, é hora de verificar se tudo está funcionando como previsto.
Para verificar se as alterações de configuração foram aplicadas, você executará alguns testes. O primeiro verificará qual módulo de multiprocessamento o Apache HTTP está usando. O segundo verificará se o PHP está usando o gerenciador FPM.
Verifique o servidor Apache HTTP executando o seguinte comando:
- sudo apachectl -M | grep 'mpm'
Sua saída será a seguinte:
Outputmpm_event_module (shared)
Você pode repetir o mesmo para o módulo proxy
e para o FastCGI:
- sudo apachectl -M | grep 'proxy'
O resultado será:
Outputproxy_module (shared)
proxy_fcgi_module (shared)
Se você quiser ver a lista completa dos módulos, você pode remover a segunda parte do comando após o -M
.
Agora, é hora de verificar se o PHP está usando o gerenciador de processos FastCGI. Para fazer isso, você escreverá um pequeno script PHP que lhe mostrará todas as informações relacionadas ao PHP.
Execute o seguinte comando para gravar um arquivo com o nome a seguir:
- sudo nano /var/www/your_domain/info.php
Adicione o conteúdo a seguir ao arquivo info.php
:
<?php phpinfo(); ?>
Agora, visite o URL do seu servidor e acrescente info.php
ao final do seguinte modo: http://your_domain/info.php
.
A entrada da API do servidor será FPM/FastCGI
Exclua o arquivo info.php
após esta verificação para que nenhuma informação sobre o servidor seja divulgada publicamente:
- sudo rm /var/www/yourdomain.com/info.php
Você verificou o status de funcionamento do módulo MPM, os módulos que estão gerenciando o FastCGI e o processamento de código PHP.
Você otimizou sua pilha LAMP original, de forma que o número de conexões para criar novos processos Apache HTTP aumentou, o PHP-FPM irá lidar com o código PHP com maior eficiência, e o uso global de recursos melhorou.
Consulte a documentação do projeto Apache HTTP para obter mais informações sobre os diferentes módulos e projetos relacionados.
Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.
Sign up