【问题标题】:Apache timeout in perl CGI toolperl CGI 工具中的 Apache 超时
【发布时间】:2014-10-12 04:03:48
【问题描述】:

我正在运行一个执行系统命令 (Unix) 的 Perl CGI 工具,该工具可能会运行几秒钟到一个小时。 脚本完成后,该工具应在屏幕上(在浏览器中)显示结果日志。 问题是大约 5 分钟后我收到超时消息“网关超时” - 系统命令继续运行,但我无法向用户显示运行结果。

在 Apache 配置文件 (httpd.conf) 中:超时 300。

是否有一种简单的方式命令 Apache 仅针对特定运行增加超时? 我真的不想永久更改 Apache 超时(或者我应该吗?),也不想大幅更新代码(大量回归测试)。

提前致谢。

迈克

【问题讨论】:

    标签: apache perl timeout cgi


    【解决方案1】:

    让脚本每隔一段时间生成一些输出。超时不是为了让程序运行到完成,而是 Apache 等待数据时的超时。所以如果你设法让你的程序在运行时定期输出一些东西,你会没事的。

    请注意,HTTP 客户端(即浏览器)也有自己的超时时间。如果您的浏览器在五分钟内(通常)没有从 Web 服务器获得任何新数据,浏览器将声明超时并放弃,即使服务器仍在处理。如果您的长时间运行的处理时不时地提供一些输出,它也将有助于防止浏览器超时!

    【讨论】:

      【解决方案2】:

      为了完整性:

      虽然公认的答案是最好的(它在 TCP/IP 中被称为 KeepAlive 数据包,或者在 appletalk 时代被称为 Tickle 数据包),但您确实问过您是否可以进行动态 Apache 配置。

      一个 apache 模块可以做到这一点。哦,但是用 C 语言编写是很痛苦的。 请记住,mod_perl(在某种程度上是 mod_python,尽管它已被弃用)不仅处理程序,而且还将内部配置包装在 perl 中。在某些情况下,您可以编写一些复杂的东西来增加超时。但是,这将是一个编写和测试的熊,你最好按照 Krisku 所说的去做。

      【讨论】:

        【解决方案3】:

        似乎没有任何方法可以在 <!--#include virtual=... --> 指令上指定超时,但是如果您使用 mod_cgid 而不是 mod_cgi,那么从 Apache 2.4.10 开始,您可以在 httpd 中指定一个可配置的超时参数.conf 或 .htaccess:

        CGIDScriptTimeoutnnns

        ...其中 nnn 是 Apache 允许思考 CGI 脚本继续运行的秒数。

        警告:如果您将 PHP 与 Apache 一起使用,那么您的 Apache 可能在 /etc/httpd/conf.modules.d/00-mpm.conf 中配置为使用“prefork”MPM(因为PHP 需要它,除非使用线程安全标志构建),并且默认的 Apache 安装使用带有 prefork MPM 的 mod_cgi,所以你可能需要编辑 /etc/httpd/conf.modules.d/01-cgi.conf 来告诉Apache 使用 mod_cgid 代替 mod_cgi。

        虽然 01-cgi.conf 中的注释说,“mod_cgid 应该与线程 MPM 一起使用;mod_cgi 与 prefork MPM”, 这似乎不正确,因为 mod_cgid 似乎对我来说,与 Apache 2.4.46 一起使用 prefork MPM 和 PHP。

        虽然这不能让您完全控制服务器超时,但您可以为特定目录指定不同的 CGIDScriptTimeout 设置(例如,将慢速 .cgi 文件放在 ./slowstuff/ 文件夹中)。

        (当然,正如 krisku 在接受的答案中提到的那样,更改 CGIDScriptTimeout 并不能解决用户 Web 浏览器超时的问题。)

        【讨论】:

          猜你喜欢
          • 2013-10-26
          • 2011-03-28
          • 1970-01-01
          • 1970-01-01
          • 2014-09-14
          • 2011-05-26
          • 1970-01-01
          • 1970-01-01
          • 2012-11-12
          相关资源
          最近更新 更多