O Apache possui diversos manipuladores de PHP disponíveis. Cada um possui pontos positivos e negativos que farão com que um deles seja o ideal para seu ambiente.
*O LSAPI funciona com servidores que tenham CloudLinux.
Handler CGI
CGI, do inglês, Common Gateway Interface é configurado como padrão em servidores com WHM/cPanel, por isso é o único garantido de estar instalado nesses sistemas. No entanto, ele não é recomendado e deve ser utilizado apenas como um reserva, caso o handler principal apresente problemas. Ele costuma ser acompanhado do módulo ruid2, pois seu padrão de criação de processos é para o usuário “nobody” (o que não é tão seguro), e precisa desta configuração adicional para que o administrador saiba quais contas são responsáveis por executar os scripts PHP e possa gerir o sistema em casos de abusos.
Sua forma de operação é “non-persistenly”, ou seja, ele inicia um novo processo PHP a cada nova requisição ao servidor – o que tende a gerar um uso de CPU mais elevado, por criar processos PHP mais frequentemente, mas menor uso de memória (em geral).
Se ele não é recomendado, por que é padrão?
Pois ele funciona de maneira adequada com a maioria dos ambientes, embora tipicamente seja recomendado o DSO.
Handler suPHP
Sua última atualização foi em 2013 e foi descontinuado seu suporte desde então – era o mais recomendado dos manipuladores de PHP em muitos casos. Nos processos são indicados os usuários próprios que estão executando a ação, não requer módulo adicional para isso. Por enquanto vai continuar disponível para instalação em servidores WHM/cPanel, basta instalar o RPM próprio. Ele não necessita ser instalado mais de uma vez – para cada versão do PHP do sistema.
Assim como o CGI, é “non-persistent” e cria um processo novo a cada requisição, poupando memória (já que ela não é constantemente alocada para execução de processos).
Qualquer mudança aplicada nas configurações do suPHP são aplicadas de imediato, sem a necessidade de restart no serviço.
Ele não é compatível com o mpm_itk ou com o mod_ruid2.
Handler DSO
Disponível quando é feita a instalação do RPM apropriado. Seus pacotes são chamados ea-phpXX-php, existindo um para cada versão do PHP. Só é possível ter um instalado por vez no servidor, visto que todos utilizam o mesmo nome de módulo quando prontos.
Este manipulador embute o código dentro do servidor do Apache, criando processos httpd e assim evitando a necessidade de criar processos PHP. Os processos serão então do usuário nobody, precisando instalar outros módulos para fazer o sistema identificar os usuários responsáveis (tornando o sistema mais seguro). Pode ser combinado com o mpm_itk (com prefork) ou com o mod_ruid2.
O DSO opera em estado persistente: pode manter um processo em andamento para lidar com execuções do PHP adicionais. O resultado é que a quantidade de uso do CPU tipicamente requerida é menor, mas porque ele também precisa criar processos fora do Apache, tende a manter uma quantidade significativa de baixa memória utilizada em comparação com outros handlers.
As mudanças efetuadas nas configurações requerem um restart graceful do serviço para surtirem efeito no sistema. No DSO, para configurações personalizadas são utilizados arquivos .htaccess.É uma escolha comum para administradores receosos com a utilização de recursos do sistema.
Handler FCGI
FCGI é uma variação do CGI, ele é considerado um manipulador experimental em ambientes WHM/cPanel. Portanto, é recomendada sua utilização para fins de teste e necessária experiência com sua configuração. Algumas aplicações que utilizarem o FCGI precisarão suportar o protocolo FastCGI, o que nem sempre é garantido em algumas aplicações PHP populares. É recomendado que você verifique a documentação das aplicações que rodam em seu servidor antes de mudar para o FCGI.
Ele não funciona com o MultiPHP. Assim como o DSO e o CGI, cria processos com o usuário “nobody” e precisa de módulos adicionais para torná-lo mais seguro e administrável. Como não é compatível com o ITK nem com o ruid2, é possível instalar o suexec para solucionar esse problema.
Opera de forma persistente, ou seja, mantém os processos PHP para além de uma única execução – geralmente resultando em menos utilização do CPU, mas em mais uso de memória.
Abaixo, uma lista de valores recomendados para inserir no arquivo /etc/apache2/conf.d/php-fcgid.conf (eles podem variar de acordo com o perfil do seu servidor),
AddHandler fcgid-script .fcgi .php
DefaultInitEnv PHPRC "/etc/phpXX/cgi"
FCGIWrapper /usr/bin/php-cgi .php
IdleTimeout 240
IPCCommTimeout 240
MaxRequestsPerProcess 1000
MaxProcessCount 10
MaxSpareThreads 10
MaxClients 300
MaxRequestsPerChild 1000
MinSpareThreads 3
ServerLimit 500
StartServers 3
ThreadsPerChild 10
Coloque o ExecCGI no vhosts,
Order Allow,Deny
Allow From All
Allow Override All
Options MultiViews Indexes Includes FollowSymLinks ExecCGI
E, por fim, reinicie o apache.
Handler PHP-FPM
PHP-FPM, ou PHP FastCGI Process Manager, é uma alternativa ao FastCGI que permite ao servidor gerenciar de uma forma mais eficiente situações de load alto. Ele é um dos mais rápidos handlers disponíveis e trabalha em conjunto com o opcode caching para isso.
O PHP-FPM efetua a gestão de recursos através de pools (workers) que respondem às requisições PHP. Ele permite que você configure o limite para cada conta do servidor, o que facilita a gestão. Dependendo da configuração dos pools, ele pode consumir muito mais memória do que os demais handlers, por isso sua configuração precisa ser de acordo com os recursos disponíveis na máquina*.
Algumas configurações, ao contrário dos demais handlers, só são aplicadas à nível global – precisando de uma administração mais presente – e não é possível modificar configurações do PHP via .htaccess.
Confira mais informações e procedimentos para o PHP-FPM na documentação!
*A recomendação do cPanel é de utilizar o PHP-FPM apenas se o servidor tiver mais de 2GB de RAM disponível ou, no mínimo, 30 MB por domínio existente.
Handler LSAPI
Handler exclusivo para servidores CloudLinux*. Com o LiteSpeed, sua performance é dita a melhor de todos os handlers disponíveis – chegando a ser 75% mais rápido do que servidores com PHP-FPM utilizando nginx.
Possui uma baixa demanda por memória e interpreta as configurações aplicadas em arquivos .htaccess. Permite executar mais de uma versão do PHP ao mesmo tempo, sendo compatível com o PHP Selector. Ao contrário do PHP-FPM e do FCGI, não apresenta problemas de instabilidade e ainda é compatível com o opcode caching.
MPM Worker e Event funcionam com o LSAPI.
*Recentemente foi disponibilizado um módulo que pode ser instalado por todos os usuários de WHM/cPanel, o mod_lsapi, mas ele não é tão eficiente quanto o LSAPI em servidores CloudLinux.
Confira a documentação do CloudLinux para instalação e configuração adicional do LSAPI: