Existem alguns "wrappers" php diferentes (?). Quais são as diferenças entre eles? Tentei pesquisar no Google, mas não consigo encontrar informações. (mod-php não é googleável).
Por que eu poderia escolher um em detrimento de outro?
Existem alguns "wrappers" php diferentes (?). Quais são as diferenças entre eles? Tentei pesquisar no Google, mas não consigo encontrar informações. (mod-php não é googleável).
Por que eu poderia escolher um em detrimento de outro?
CGI e FastCGI são dois protocolos não específicos do PHP:
Os scripts CGI são uma maneira de executar um script do lado do servidor (não apenas PHP!) Quando chega uma solicitação HTTP. Nessa configuração, o servidor da Web inicia um novo processo CGI para cada solicitação recebida, causando sobrecarga significativa no desempenho.
FastCGI é um "CGI melhor" - para lidar com as limitações do CGI, o FastCGI é executado como um servidor (TCP ou UNIX), para que os recursos possam ser reutilizados nas solicitações.
O servidor web habilitado para PHP pode ser configurado da seguinte forma:
mod_php é um módulo Apache para rodar PHP. Nesta configuração, a solicitação do PHP é tratada no processo do Apache com tudo o que o acompanha: os processos do PHP são definidos na configuração do Apache, o PHP é executado sob o usuário e as permissões do Apache, etc.
PHP-FPM é a implementação FastCGI do PHP. Nesta configuração, o PHP-FPM é executado como um servidor FastCGI autônomo e o Apache se conecta a ele usando módulos FastCGI, como
mod_fcgid
,mod_fastcgi
oumod_proxy_fcgi
(Apache 2.4+). Nesta configuração, permissões, processos relacionados e tudo mais é controlado pelo servidor PHP-FPM. O desempenho é comparável commod_php
.SuPHP - isso foi usado para resolver algumas deficiências
mod_php
relacionadas a permissões: commod_php
scripts PHP são executados sob o usuário/grupo Apache, masmod_suphp
podem executar os scripts como um usuário diferente. suPHP não é mais mantido e não deve ser usado.CGI/FastCGI - adicionei este com base em uma pergunta nos comentários. Sem conhecer os detalhes da configuração, o PHP pode ser executado como servidor FastCGI usando qualquer outra implementação FastCGI - conforme explicado em outra pergunta . Eu não uso essa configuração e não vejo nenhum benefício sobre o PHP-FPM.
CGI - PHP também pode ser executado como o bom e velho script CGI, mas não consigo imaginar um único bom caso de uso para isso, além da compatibilidade com alguns ambientes muito desatualizados.
Em relação às vantagens e desvantagens dessas diferentes abordagens, eu me atenho apenas ao
mod_php
PHP-FPM, cobrindo dois casos de uso principais:mod_php
pode ser útil em determinadas configurações do Docker em que você deseja entregar um único contêiner executando um servidor da Web habilitado para PHP. O fato de tudo rodar como um único processo facilita a configuração do container Docker. Por outro lado, executar o servidor PHP-FPM em um único contêiner com um servidor da Web exigiria a orquestração do processo com supervisord , script bash avançado ou alguma outra abordagem e vai contra as práticas recomendadas de criação de contêineres do Docker.PHP-FPM é uma abordagem mais poderosa que separa melhor as preocupações, de modo que o servidor PHP-FPM pode ser configurado, (desempenho) ajustado e mantido separadamente do servidor web. Isso também permite executar o servidor PHP-FPM em um pool ou em uma máquina diferente do servidor web. Conforme implícito acima, para contêineres Docker, um PHP-FPM separado e contêineres de servidor web são recomendados neste caso, tornando a configuração mais complexa (e mais poderosa). A abordagem PHP-FPM também é a única maneira com o servidor web nginx , pois o módulo PHP para ele AFAIK não existe.
Minha implementação do Docker das duas abordagens mencionadas pode ser encontrada aqui:
A implementação foi projetada para funcionar com alguns de meus legados e novos projetos em meu cluster Kubernetes. Sinta-se livre para usá-lo.
Então, TLDR:
mod_php
e PHP-FPM são duas maneiras principais de executar o PHPmod_SuPHP
foi uma abordagem que foi usada para lidar com asmod_php
deficiências. Ele está desatualizado e o PHP-FPM deve ser usado em seu lugar.