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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!