Encontrou a resposta em: link
O problema não é PHP, mas mod_fcgid. Enquanto o PHP gera múltiplos filhos, mod_fcgid
é ignorante, e servirá um pedido por criança. Portanto, quando FcgidMaxProcessesPerClass 1
é usado, toda a execução do PHP acontece após o outro. *
A solução apresentada em
links para: link explica como usar mod_fastcgi
que não tem essa limitação. Ele enviará várias solicitações para o mesmo filho.
[*] Note que não usar FcgidMaxProcessesPerClass 1
resulta em muitas instâncias separadas de PHP, Ruby, etc., enquanto todas elas são capazes de processar muitos pedidos internamente em um único processo.
Daí uma nova configuração do Apache para usar o PHP com o fastcgi:
<IfModule mod_fastcgi.c>
# Needed for for suEXEC: FastCgiWrapper On
FastCgiConfig -idle-timeout 20 -maxClassProcesses 1 -initial-env RAILS_ENV=production
FastCgiIpcDir /var/lib/apache2/fastcgi
AddHandler php5-fcgi .php
Action php5-fcgi /.fcgi-bin/php5-wrapper.sh
DirectoryIndex index.php
ScriptAlias /.fcgi-bin/ /srv/www/cgi-bin/
<Location "/.fcgi-bin/php5-wrapper.sh">
Order Deny,Allow
Deny from All
#Allow from all
Allow from env=REDIRECT_STATUS
Options ExecCGI
SetHandler fastcgi-script
</Location>
# Startup PHP directly
FastCgiServer /srv/www/cgi-bin/php5-wrapper.sh
# Support dynamic startup
AddHandler fastcgi-script fcg fcgi fpl
</IfModule>