O Apache estava lento na produção. Depois de procurar respostas por algum tempo, finalmente fui ao canal IRC #apache e os profissionais me fizeram verificar o modo apache com este comando:
sudo apachectl -V
e ficaram alarmados ao descobrir que o Server MPM é pré - fork . Eles enfaticamente disseram: NÃO USE PREFORK EM UM SERVIDOR DE PRODUÇÃO. Acontece que os pacotes Ubuntu (presumivelmente herdados do Debian?) Insistem em executar o apache no modo prefork, apesar do método recomendado para executar o PHP com Apache recomendar claramente proxy_fcgi e php-fpm, depois o fcgid e, finalmente, diz que você não deve use prefork:
Por que você não deve mais usar o mod_php com o mpm prefork
- O mod_php é carregado em todos os processos httpd o tempo todo. Mesmo quando o httpd está servindo conteúdo estático / não php, essa memória está em uso.
- O mod_php não é seguro para threads e obriga a manter o mpm prefork (multi processo, sem threads), que é a configuração mais lenta possível
Essa página também contém alguns detalhes sobre o PHP-FPM, mas isso parece um pouco elaborado, pouco claro e envolve muita configuração manual. Estou decepcionado e surpreso O Ubuntu 16 não tem opção de pacote para o modo fastCGI ou algo assim.
Tentei mudar o apache para o modo de evento usando a2enmod e quando tentei acionar o apache novamente, recebi um erro:
O Apache está executando um MPM encadeado, mas seu módulo PHP não é compilado para ser seguro para encadeamentos. Você precisa recompilar o PHP
De qualquer forma, eu queria saber se alguém tinha algumas instruções passo a passo mínimas para obter o modo fastCGI em execução no Ubuntu 16 com PHP 7.0 , confiando nos instaladores de pacotes o máximo possível. Atualmente, estou vendo muitas instruções vagas e mal explicadas e estou preocupado em estragar meu ambiente de produção com más decisões.
Além disso, alguém deve adicionar mpm-event como uma opção de tag. Isso é o que os caras do #apache IRC recomendaram.
fonte
Respostas:
O ezra-s sugere uma boa abordagem, mas não inclui alguns detalhes que podem ser confusos para as pessoas que confiam nos gerenciadores de pacotes. NOTA : Não tenho certeza se essas etapas são exatas. Se alguém encontrar problemas ou encontrar problemas, entre em contato e atualizarei esta postagem.
Em primeiro lugar, até o momento em que este artigo foi escrito, os pacotes apache2 do Ubuntu insistem em prefork se você deseja instalar o PHP. Não se desespere, no entanto, porque você ainda pode usar instaladores de pacote para instalar e atualizar PHP e apache2 e ainda obter sua configuração de trabalhar com Apache no evento modo utilizando PHP-FPM como recomendado pelo wiki Apache e descritos em mais detalhes em Alta PHP de desempenho no apache httpd 2.4.x usando mod_proxy_fcgi e php-fpm . A idéia básica é que o apache2 e o PHP-FPM se comuniquem via soquete, em vez do PHP sendo executado como um módulo Apache.
1) Remova ou desative o módulo Apache PHP
Como os pacotes Ubuntu insistem em pré-forjar o Apache ao instalar o PHP, precisamos separá-los. Fiz isso usando o apt para desinstalar o libapache2-mod-php7.0 porque não preciso mais do pacote:
Como alternativa, você pode desativar o módulo php7.0 Apache, mas isso não removerá o pacote apt do seu sistema, o que deixa para trás um problema irritante no sistema.
2) Alterne o Apache para o modo de evento e ative o fcgid
Eu acredito que estes comandos devem fazer o truque:
3) Instale o PHP-FPM
Eu já tenho o PHP 7 instalado com seus vários módulos, então eu apenas instalo o PHP-FPM com este comando:
4) Edite sua configuração do VirtualHost para manipular arquivos PHP com PHP-FPM:
No meu caso, editei o host SSL padrão, /etc/apache2/sites-available/default-ssl.conf , e adicionei esta linha bem perto do topo:
IMPORTANTE Isso instrui o Apache a lidar com solicitações de arquivos PHP com PHP-FPRM e o caminho nesta diretiva ( /run/php/php7.0-fpm.sock ) deve corresponder ao caminho especificado pela diretiva listen no arquivo / etc / php /7.0/fpm/pool.d/www.conf
5) Reinicie o Apache
Para verificar se o modo de evento está ativado, use este comando:
Na saída, você deve ver isso:
Tente criar uma página phpinfo e acessá-la no seu navegador. Você deve ver
Server API: FPM/FastCGI
na saída.fonte
a2enconf /etc/apache2/conf-available/php7.3-fpm.conf; systemctl reload apache
criar e quando criei um arquivo phpinfo.php com<?php phpinfo();
inside, a linha da API do servidor diz FPM / FastCGI. BTW, eu instalei o php7.3 porque, no momento em que escrevi este post, alguém deveria estar nessa versão, se não superior, e os repositórios do Ubuntu apt para o Ubuntu Server 19.10 passam para o php7.3 atualmente.As distribuições oferecem o método "mod_php" por conveniência.
Enquanto a maneira mais eficiente é apache w / event + mod_proxy_fcgi -> php-fpm.
Talvez eles devam atualizar com os tempos, mas é difícil para eles quando tantas estruturas vêm com as configurações .htaccess mod_php de uma maneira "plug & play". No final, é o administrador o único responsável por administrar e configurar seu site corretamente.
Se você estiver em produção, sugiro que você use um servidor de teste para praticar a atualização e as alterações.
Sobre o wiki, prefiro ou sugiro o método "manipulador". https://wiki.apache.org/httpd/PHP-FPM#Proxy_via_handler .
Ou seja, configure o php-fpm para ter um soquete pronto e com permissões suficientes para o usuário do Apache enviar solicitações a ele e configure o Apache para usá-lo.
Um exemplo rápido:
Editar:
Dessa forma, não importa qual versão do PHP você usa, porque o Apache não se importa, ele apenas reverterá as solicitações apropriadas para o php-fpm.
Além disso, não esqueça de descarregar o mod_php para poder usar o mpm_event.
Edição 2:
Conforme a solicitação, você não precisa desinstalar os pacotes mod_php do debian / ubuntu, o Apache se preocupa apenas com sua configuração, portanto, a descarga do módulo será necessária.
fonte