Qual é a diferença do manipulador PHP (CGI vs FastCGI vs Mod_PHP vs suPHP)?

5

Eu entendo que existem quatro manipuladores PHP diferentes por aí (AFAIK).

  • CGI (php-cgi)
  • FastCGI (php-fpm)
  • Mod_PHP
  • suPHP

Eu preciso conhecer os prós e contras desses manipuladores e para quais ambientes cada um é adequado?

Por exemplo, se eu estiver executando um servidor de hospedagem compartilhada, qual dos manipuladores acima é o certo para mim? Ou se eu estiver gerenciando um servidor privado?

    
por Hamed Momeni 13.11.2012 / 09:04

1 resposta

5

Esses não são realmente "6 PHP Types", e sim dois tipos PHP, cada um sendo executado em 3 implementações diferentes do Apache.

suphp, suphp_worker e suphp_event

suPHP propriamente dito é um invólucro para PHP, rodando PHP sob certos direitos de usuário (ex: diferindo dos direitos que o Apache executa sob ) mais um módulo Apache (mod_suphp) que permite executar o suPHP - basicamente em um modo CGI. Modo CGI simplificado significa que cada requisição passada para o PHP inicia um novo processo PHP (runtime). Isso é caro, em termos de uso da CPU, e mais lento comparado a um tempo de execução persistente do PHP (~ cerca de 3-5 vezes, eu acho).

Suponho que essa primeira variante use o MPM de pré-requisitos do Apache , que é amplamente usado e testado mas bastante lento, comparado a outros MPMs. O Prefork faz o que o nome indica: ele cria uma certa quantidade de processos do apache e os mantém disponíveis para solicitações de entrada.

O próximo (suphp_worker) usa o MPM do trabalhador . Worker é uma mistura de processos e encadeamentos pré-gerados, que geralmente é mais rápida que o prefork (para fornecer conteúdo estático) cerca de duas vezes ) e usa menos memória.

O último (suphp_event) parece usar o suPHP + evento MPM , que usa mais uma vez outro modelo de processo / encadeamento que trabalhador. De pontos de referência que eu vi , evento e O trabalhador tem aproximadamente a mesma velocidade - o evento MPM (pelo menos usando o Apache 2.2, que seu provedor provavelmente faz) é marcado como experimental.

mod_php, mod_php_ruid2 e mod_php_itk

Este é um tipo diferente de implementação do manipulador PHP: o Apache pré-inicia um tempo de execução PHP e passa as solicitações recebidas para ele, gerando novos processos conforme necessário. Isso é considerável mais rápido que o suPHP, mas vem com a desvantagem de não haver separação do usuário: todos os processos do php são executados sob os mesmos direitos que o próprio Apache.

A primeira variante provavelmente usa o prefork MPM (descrito acima), já que mod_php é incompatível com os modelos de thread de worker ou event.

A segunda variante (mod_php_ruid2) parece usar o módulo do Apache mod_ruid2 , além disso, o que permite que você execute cada Apache VirtualHost sob diferentes direitos de usuário - isso inclui processos PHP. Tem uma longa lista de incapacidades que você deve considerar.

A última variante (mod_php_itk) usa o ITK MPM de terceiros para o Apache, um fork do Apache prefork MPM com o opção executar cada VirtualHost sob determinados direitos do usuário. Também lhe dá a capacidade de impor limites adicionais (por exemplo, quantidade de clientes) por VirtualHost.

Sugestão

Se essas são sua única opção, e você está "sozinho" em sua máquina (também conhecido como: você não planeja hospedagem compartilhada) eu provavelmente ficaria com o bom e velho mod_php.

Se você está planejando vários sites, precisa verificar suas prioridades:

  • segurança sobre desempenho: use suphp_worker. Ambos (trabalhador MPM e suPHP) são amplamente testados e oferecem um bom ponto de partida para a segurança. O desempenho para arquivos estáticos deve ser bom, PHP não é muito.
  • desempenho em relação à segurança: provavelmente mod_php_ruid2, mas apenas porque tenho uma experiência ruim com o ITK

Eu prefiro usar uma terceira opção, que usa FastCGI, dando-lhe ainda mais possibilidades de separar direitos e privilégios de acesso - mas isso parece não ser oferecido.

    
por 13.11.2012 / 10:13