试图了解Apache超时/体系结构

我有一个运行Apache httpd 2.2.15和PHP 5.3.3的CentOS 6.3版系统。

我的PHP网站运行良好,除了一个查询,显然已经超时限制。 该查询现在需要超过60秒的时间才能运行,因此用户的浏览器只是等待了很长时间,大约5分钟或更长时间,然后才显示空白页面。

这让我想知道Apache / PHP是如何工作的。

我build立了一个简单的PHP脚本testing用例,它简单地执行以下操作:

  • 睡55/65秒;
  • 追加“我还在这里!” 到服务器上的文件;
  • 输出一行HTML。

超时时间为55秒时,一切正常; 我的浏览器等待55秒,然后呈现HTML。

当我将超时设置为65秒时,浏览器旋转5分钟或更长时间,然后显示完全空白的页面。 与此同时:

  • “我还在这里”debugging行仍然附加到服务器上的文件中,显示PHP愉快地跑;

  • Apache访问日志还显示查询运行,返回一个200的HTTP状态码和正确的包含HTML的字节数;

  • Apache或PHP都没有logging错误。

我试着改变了几个似乎相关的configuration设置:

  • Apache httpd.conf'Timeout'指令,从60到120;

  • php.ini的'default_socket_timeout'设置,从60到120。

但testing用例仍然运行完全一样; 即使在页面返回65秒之后,浏览器仍然“挂起”。 这是几个Firefox版本的情况。

有人能帮助我理解这里的事情吗? 其次,我怎样才能提高有效的超时限制,所以我的慢查询可能需要超过60秒的时间才能运行,并成功地将其结果返回给浏览器?

我预料到,如果Apache有限制 – “不要等待超过60秒,PHP才能运行查询” – 那么在60秒后或者其它情况下,它会向浏览器返回某种错误logging一些其他的错误。 相反,我看到PHP运行完成,Apache访问日志告诉我“嘿,一切都很好,我把75个字节的输出传输到浏览器”,但浏览器本身就在那里,从来没有收到输出。 什么是默默“断开”? 如果Apache从不发送错误,并允许PHP运行完成,为什么不发送结果(就像它在访问日志中说的那样)?

非常感谢您的帮助。

将/etc/php.ini中的所有60秒值更新为120以进行testing。 如果您在configuration更改后重新启动Apache,并且仍然遇到上述问题,那么看起来php是基于描述引起的。