Apache版本2+将请求上的TimeOut指令加倍

我们一直在testingApache 2+版本,并且在所有的请求中TimeOut指令集被处理了2次。 您可以看到下面的日志(TimeOut设置为2秒):

[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 

Apachelogging请求达到TimeOut设置的时间,然后在返回错误之前允许另外2秒的时间间隔。

TimeOut 3,5,10等发生同样的情况 – 双倍超时。

你能指出我明显在这里失踪吗?

编辑:正在执行的PHP脚本只是60秒的睡眠。

strace输出:

http://pastebin.com/h4dHU64X

系统信息:

操作系统:CentOS 6.5

谢谢。

Apache没有做错任何事:因为你调用了PHP两次,所以你有两个超时。

第一次是您尝试加载网页本身,超时了。

第二次是Apache试图加载ErrorDocument ,因为它不存在,被传递给PHP进行处理。

要解决此问题,请将ErrorDocument设置为存在的静态HTML页面。

 ErrorDocument 504 /failwhale.html 

我不能自己解释这个问题,我也想知道为什么Apache做这个“ 双倍超时 ”,因为它对于实际的Apache文档来说是相当奇怪和有争议的。

当使用PHP的CGI包装,我想出了以下的“ ”解决scheme:

 timeout 30 /usr/bin/php-cgi 

而不是使用:

 exec /usr/bin/php-cgi 

这样,当达到超时时,内核直接杀死执行。