有没有办法禁用 FastCGI 的读取超时?(fastcgi_read_timeout)
将其设置为零不起作用并且只会导致立即超时。
- Nginx 1.0.5
- PHP-FPM 5.3.6-13ubuntu3.6
我需要绕过超时的原因在于我们使用的系统生成报告的方式。由于 PHP-FPM 中无法分叉(pctnl_fork() 已禁用),因此请求一发出,报告处理就会完成。这会导致读取挂起,直到系统完成处理。
答案1
看起来你唯一的选择是设置fastcgi_read_timeout
设置为一个非常大的值(比如 1h 或 1d)。
答案2
我将如何解决这个问题:
当用户发送生成报告的请求时,用于
exec("php report.php")
在 CLI 模式下运行报告生成脚本。当然,使用一些可识别的信息作为参数。为用户加载“请等待”页面,使用 AJAX 检查报告是否已完成
ps w
. 查找脚本名称和使用的参数。完成后,重定向到报告页面。
这样,如果等待时间过长(实际上会使等待时间变得更长),您可以阻止用户混合刷新,同时还可以通知用户该过程仍在运行。