尽管01-cgi.conf中的注解说,“mod_cgid应该用于线程MPM; mod_cgi with the prefork MPM," that doesn't seem to be correct,because mod_cgid seems to work fine with prefork MPM and PHP,for me,with Apache 2.4.46. 虽然这不能给予您完全控制服务器超时,但您可以为特定目录指定不同的CGIDScriptTimeout设置(例如,将slow .cgi文件放在./slowstuff/文件夹中)。 (Of当然,正如krisku在接受的答案中提到的,更改CGIDScriptTimeout不会解决用户的Web浏览器超时的问题。
3条答案
按热度按时间lxkprmvk1#
让脚本每隔一段时间生成一些输出。超时不是为了运行程序完成,而是Apache等待数据时的超时。因此,如果你设法让你的程序在运行时有规律地输出一些东西,你会很好的。
请注意,HTTP客户端,即浏览器也有自己的超时时间。如果您的浏览器在五分钟内没有从Web服务器获得任何新数据(通常),浏览器将声明超时并给予,即使服务器仍在处理。如果您的长时间运行的处理会时不时地给出一些输出,这也会帮助您防止浏览器超时!
6bc51xsx2#
完整性:
虽然公认的答案是最好的(它在TCP/IP中被称为KeepAlive包,或者在appletalk时代被称为Tickle包),但你确实问过你是否可以做动态Apache配置。
Apache模块可以做到这一点。哦,但这是一个痛苦的写在C。请记住,mod_perl(以及某种程度上的mod_python,尽管它已被弃用)不仅处理程序,而且还 Package 了perl中的内部配置。您可以编写一些复杂的代码来增加某些情况下的超时。但是,这将是一个熊编写和测试,你最好做什么Krisku说。
0ve6wy6x3#
似乎没有任何方法可以在
<!--#include virtual=... -->
指令上指定超时,但是如果你使用mod_cgid而不是mod_cgi,那么从Apache 2.4.10开始,有一个可配置的超时参数,你可以在httpd.conf或.htaccess中指定:CGIDScriptTimeout
nnns其中 nnn 是Apache允许CGI脚本继续运行的秒数。
尽管01-cgi.conf中的注解说,“mod_cgid应该用于线程MPM; mod_cgi with the prefork MPM," that doesn't seem to be correct,because mod_cgid seems to work fine with prefork MPM and PHP,for me,with Apache 2.4.46.
虽然这不能给予您完全控制服务器超时,但您可以为特定目录指定不同的CGIDScriptTimeout设置(例如,将slow .cgi文件放在./slowstuff/文件夹中)。
(Of当然,正如krisku在接受的答案中提到的,更改CGIDScriptTimeout不会解决用户的Web浏览器超时的问题。