1) Remova ou desative o módulo Apache PHP

1) Remova ou desative o módulo Apache PHP

O Apache estava lento na produção. Depois de procurar respostas por algum tempo, finalmente fui ao canal de IRC #apache e os profissionais me pediram para verificar o modo apache com este comando:

sudo apachectl -V

e ficaram alarmados ao descobrir queServidor MPMépré-garfo. Eles disseram enfaticamenteNÃO USE PREFORK EM UM SERVIDOR DE PRODUÇÃO.Acontece que os pacotes do Ubuntu (presumivelmente herdados do Debian?) insistem em executar o Apache no modo prefork, apesar do fato de que ométodo recomendado para executar PHP com Apacherecomenda claramente proxy_fcgi e php-fpm, depois fcgid e, por fim, diz que você não deve usar o prefork:

Por que você não deve mais usar mod_php com o prefork mpm

  • 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.
  • mod_php não é thread-safe e força você a usar o prefork mpm (multiprocesso, sem threads), que é a configuração mais lenta possível

Essa página também contém algunsdetalhes sobre PHP-FPMmas isso parece um pouco elaborado e pouco claro e envolve muita configuração manual. Estou desapontado e surpreso que o Ubuntu 16 não tenha opção de pacote para o modo fastCGI ou algo assim.

Eu tentei mudar o apache paramodo de eventousando a2enmod e quando tentei iniciar o apache novamente, recebi um erro:

O Apache está executando um MPM threaded, mas seu módulo PHP não foi compilado para ser threadsafe. Você precisa recompilar o PHP

De qualquer forma, eu queria saber se alguém tinha algumas instruções mínimas passo a passo para executar o modo fastCGI no Ubuntu 16 com PHP 7.0confiando tanto quanto possível nos instaladores de pacotes.Atualmente, estou vendo muitas instruções vagas e mal explicadas e estou preocupado em estragar meu ambiente de produção com decisões erradas.

Além disso, alguém deveria adicionar mpm-event como uma opção de tag. Isso é o que o pessoal do #apache IRC recomendou.

Responder1

ezra-ssugere uma boa abordagem, mas não inclui alguns detalhes que podem ser confusos para quem depende de gerenciadores de pacotes.OBSERVAÇÃO: Não tenho certeza se essas etapas são exatas. Se alguém encontrar problemas ou encontrar problemas, avise-me e atualizarei esta postagem.

Em primeiro lugar, no momento em que este livro foi escrito, os pacotes apache2 do Ubuntu insistiam no prefork se você deseja instalar o PHP. Não se desespere, porque você ainda pode usar instaladores de pacotes para instalar e atualizar o PHPeapache2 e ainda fazer sua configuração funcionar com o Apache emeventomodo usando PHP-FPM comorecomendado pelo wiki do Apachee descrito com mais detalhes emPHP de alto 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 rodando como um módulo Apache.

1) Remova ou desative o módulo Apache PHP

Como os pacotes do Ubuntu insistem no pré-fork do Apache ao instalar o PHP, temos que separá-los. Fiz isso usando o apt para desinstalar o libapache2-mod-php7.0 porque não preciso mais do pacote:

sudo apt-get remove libapache2-mod-php7.0

Alternativamente, você pode desabilitar o módulo php7.0 Apache, mas isso não removerá o pacote apt do seu sistema, o que deixa para trás problemas irritantes no sistema.

sudo a2dismod php7.0

2) Mude o Apache para o modo de evento e habilite o fcgid

Acredito que estes comandos devem resolver o problema:

sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo a2enmod proxy_fcgi

3) Instale PHP-FPM

Já tenho o PHP 7 instalado com seus diversos módulos, então basta instalar o PHP-FPM com este comando:

sudo apt-get install php7.0-fpm

4) Edite sua configuração do VirtualHost para lidar com arquivos PHP com PHP-FPM:

No meu caso, editei o host SSL padrão,/etc/apache2/sites-available/default-ssl.confe adicionei esta linha bem perto do topo:

ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php7.0-fpm.sock|fcgi://localhost/var/www/html/

IMPORTANTEIsso 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 peloouvirdiretiva no arquivo/etc/php/7.0/fpm/pool.d/www.conf

5) Reinicie o Apache

sudo service apache2 restart

Para verificar se o modo de evento está habilitado, use este comando:

sudo apachectl -V

Na saída, você deverá ver isto:

Server MPM:     event

Tente criar uma página phpinfo e acessá-la no seu navegador. Você deve ver Server API: FPM/FastCGIna saída.

Responder2

As distros oferecem o método "mod_php" por conveniência.

Embora a forma de melhor desempenho seja apache com evento + mod_proxy_fcgi -> php-fpm.

Talvez eles devessem atualizar com o tempo, mas é difícil para eles quando tantos frameworks vêm com configurações .htaccess mod_php em uma espécie de estilo "plug & play". Ao final, é o administrador o único responsável por administrar e configurar seu site corretamente.

Se você estiver em produção, sugiro que use um servidor de teste para praticar a atualização e as alterações.

Sobre o wiki eu prefiro ou sugeriria 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 para ele e configurar o Apache para utilizá-lo.

Um exemplo rápido:

# needed modules for reverse proxying to php-fpm
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so


<Virtualhost *:443>
    ServerName whatever.example.com
    #other typical directives here
    <Directory /var/www/php-app>
        <FilesMatch \.php>
            SetHandler "proxy:unix:/path/to/app.sock|fcgi://localhost/"
        <FilesMatch>
    </Directory>
</VirtualHost>

Editar:

Desta forma não importa qual versão do PHP você usa porque o Apache não se importa, ele apenas reverterá o proxy das solicitações apropriadas para o php-fpm.

Além disso, não se esqueça de descarregar o mod_php para poder usar o mpm_event.

Editar 2:

Conforme solicitação, você não precisa desinstalar os pacotes mod_php do debian/ubuntu, o Apache só se preocupa com sua configuração, então descarregar o módulo será suficiente.

informação relacionada