Diferenças e desvantagens entre: Fast-CGI, CGI, Mod-PHP, SuPHP, PHP-FPM

73

Existem poucos "wrappers" de php (?). Quais são as diferenças entre eles? Tentei pesquisar no Google alguns, mas não consigo encontrar informações. (o mod-php não é googleable).

Por que eu poderia escolher um sobre o outro?

Gacek
fonte

Respostas:

141

As perguntas são um pouco estranhas, não está claro se você está pedindo apenas PHP ou se sua pergunta é mais geral.

Vou dar uma breve visão geral do lado do PHP.

Primeiro, os dois protocolos:

  • Scripts CGI é uma maneira de executar um script do lado do servidor quando uma solicitação HTTP chega; isso não tem nada a ver com PHP

  • O FastCGI é um "CGI melhor" - o CGI é lento, o CGI rápido é uma abordagem diferente, com resultados muito mais rápidos; isso também não tem nada a ver com PHP.

Agora as coisas relacionadas ao PHP:

  • O mod_php está executando um PHP como módulo Apache - ou seja, a solicitação do PHP é executada no processo Apache com tudo o que acompanha - os processos Apache são definidos pela configuração do Apache, o PHP é executado com a permissão Apache etc.

  • PHP-FPM é a implementação FastCGI do PHP; O PHP-FPM é executado como um servidor FastCGI independente e o Apache se conecta ao servidor usando o módulo do Apache, geralmente mod_fcgid ou mod_fastcgi; Pessoalmente, acho que isso é muito melhor do que executar como mod_php, mas depende de seus requisitos e também é um pouco mais complexo; nesta configuração, permissão, processa coisas relacionadas e tudo é executado na configuração do PHP, usuário do PHP etc. O Apache se conecta ao PHP como um servidor; nessa configuração, também é possível ter um pool de servidores PHP e um servidor PHP em uma máquina fisicamente diferente do Apache. Eles dizem que isso é quase tão rápido quanto usar o módulo do Apache e existem benefícios de um melhor controle sobre a configuração do PHP.

  • SuPHP - foi usado principalmente para resolver alguns problemas do mod_php relacionados a permissões; com mod_php, scripts PHP são executados no grupo / usuário Apache; mod_suphp pode executar os scripts em diferentes usuários; Eu nunca usei, o PHP-FPM agora deve ser uma escolha muito melhor

Então, basicamente:

  • CGI, Fast-CGI são protocolos; CGI é lento, Fast-CGI é muito mais rápido
  • mod_php (com sublinhado) e PHP-FPM são duas maneiras básicas de executar o PHP
  • mod_SuPHP é semelhante ao mod_php, mas pode alterar o usuário / grupo em que o processo é executado
Aleš Krajník
fonte
Talvez eu esclareça o que me inspirou para esta pergunta. Acabei de receber um VPS com um painel ISPConfig (painel Opensource para páginas de administração). Lá eu posso escolher uma versão PHP para servidor / lado. E aqueles estão listados lá. Então, basicamente, parece que escolher o PHP-FPM escolhe o FastCGI com "wrappers" adicionais?
Gacek
12
Não sei o que o painel ISPConfig realmente usa, mas o PHP executado como PHP-FPM significa que o PHP iniciará seu próprio servidor FastCGI interno e atenderá a solicitações por meio do protocolo FastCGI. O servidor HTTP receberá solicitações da Internet, manipulando-as normalmente e, caso uma página precise ser executada usando PHP, a solicitação será entregue ao protocolo FastCGI para PHP e o resultado será enviado de volta ao navegador. Pense nisso como um servidor HTTP entre o navegador e o servidor PHP (PHP-FPM FastCGI). PHP-FPM é uma implementação do protocolo FastCGI.
Aleš Krajník
@ AlešKrajník, obrigado por essa explicação elaborada. Bem, eu tenho tentado executar o php como usuário / grupo separado. Então comecei com o Su-exec e cheguei a um beco sem saída e, em seguida, algumas pessoas recomendaram o php-fpm que você explicou. No entanto, ainda estou confuso sobre os módulos mog_cgi, mod_cgid, mod_fastcgi, mod_fcgi e como eles funcionam com o php-fpm. Também li em outro tutorial que eles estavam usando mod_fcgid e mod_proxy_fcgi. Quão difícil é entender como todas as peças se juntam.
David Okwii
11
O binário PHP-FPM do @landed faz parte de toda distribuição do PHP desde 5.3.3 ou 5.4.0 (verifique isto: php-fpm.org ), para essa versão específica do PHP.
Aleš Krajník
2
php-fpm é sobre remover custos de inicialização. O php-fpm pré-inicia vários processos php, prontos para processar solicitações e deixa-os em espera até que as solicitações cheguem - o que significa que pode responder muito mais rápido que o cgi tradicional, porque o php já está sendo executado quando as solicitações chegam, em oposição ao CGI tradicional, onde um novo processo php é iniciado para cada solicitação, o php-fpm também não encerra o processo após processar as solicitações, mas continua reutilizando os mesmos processos. - com 0 sobrecarga nos processos de inicialização e parada, o php-fpm responde muito mais rápido. iniciar e parar processos leva tempo.
hanshenrik