我们一直在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
这样,当达到超时时,内核直接杀死执行。