在 Nginx 中禁用 FastCGI 读取超时?

在 Nginx 中禁用 FastCGI 读取超时?

有没有办法禁用 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

我将如何解决这个问题:

  1. 当用户发送生成报告的请求时,用于exec("php report.php")在 CLI 模式下运行报告生成脚本。当然,使用一些可识别的信息作为参数。

  2. 为用户加载“请等待”页面,使用 AJAX 检查报告是否已完成ps w. 查找脚本名称和使用的参数。

  3. 完成后,重定向到报告页面。

这样,如果等待时间过长(实际上会使等待时间变得更长),您可以阻止用户混合刷新,同时还可以通知用户该过程仍在运行。

相关内容