O Apache versão 2+ duplica a diretiva TimeOut em solicitações

1

Testamos versões do Apache 2+ e, em todas as solicitações, o conjunto de diretrizes do TimeOut é processado 2 vezes para uma solicitação. Você pode ver o log abaixo (TimeOut definido para 2 segundos):

[Wed Feb 12 18:04:20 2014] [warn] [client 192.168.19.117] Timeout waiting for output from CGI script /usr/local/cpanel/cgi-sys/php5
[Wed Feb 12 18:04:20 2014] [error] [client 192.168.19.117] Script timed out before returning headers: php5
[Wed Feb 12 18:04:22 2014] [warn] [client 192.168.19.117] Timeout waiting for output from CGI script /usr/local/cpanel/cgi-sys/php5
[Wed Feb 12 18:04:22 2014] [error] [client 192.168.19.117] File does not exist: /home/davetest/public_html/504.shtml

O Apache registra que a solicitação atinge o TimeOut definido e, em seguida, permite outro intervalo de 2 segundos antes de retornar um erro.

O mesmo acontece com o TimeOut 3, 5, 10 etc. - dobra o tempo limite.

Você pode me apontar para o que eu obviamente sinto falta aqui?

EDIT: O script php sendo executado é de apenas 60 segundos de sono.

saída strace:

link

Informações do sistema:

OS: CentOS 6.5

Obrigado.

    
por tun31n 13.02.2014 / 09:09

2 respostas

1

O Apache não está fazendo nada errado: você tem dois tempos limite porque chamou o PHP duas vezes.

A primeira vez foi sua tentativa de carregar a própria página da web, que expirou.

A segunda vez foi a tentativa do Apache de carregar o ErrorDocument que, porque não existe, foi passado para o PHP para processamento.

Para resolver o problema, defina ErrorDocument como uma página HTML estática.

ErrorDocument 504 /failwhale.html
    
por 14.02.2014 / 19:59
0

Eu não posso explicar este problema eu mesmo, e eu também quero saber porque o Apache faz isso " Double Timeout " já que é bastante estranho e controverso para a documentação do Apache.

Ao usar o wrapper CGI para PHP eu criei a seguinte solução " side ":

timeout 30 /usr/bin/php-cgi

em vez de usar:

exec /usr/bin/php-cgi

Desta forma, a execução é eliminada diretamente pelo kernel quando o tempo limite é atingido.

    
por 14.02.2014 / 16:45

Tags