为 Apache Server mod_proxy 指令中的所有 ProxyPass 映射设置超时

为 Apache Server mod_proxy 指令中的所有 ProxyPass 映射设置超时

我所拥有的和所做的工作:

我在用着Apache HTTPD 2.2代理请求。我有多个代理通行证映射:

ProxyRequests On 
<Proxy *>
AddDefaultCharset off
    Order deny,allow
    Allow from all
</Proxy>
ProxyPreserveHost Off

ProxyPass /a http://some_ip/
ProxyPassReverse /a http://some_ip/

ProxyPass /b http://some_other_ip/
ProxyPassReverse /b http://some_other_ip/

...

效果很好。

我想要的是:

我的一些请求处理时间更长,因此它们超时了,给了我一个代理错误 - 原因:从远程服务器读取时出错

我想timeout为所有请求设置。我可以这样做而不必timeout=... KeepAlive=On为每个ProxyPass映射添加吗?

我目前有类似的东西:

ProxyPass /a http://some_ip/ timeout=1200 KeepAlive=On
ProxyPassReverse /a http://some_ip/

ProxyPass /b http://some_other_ip/ timeout=1200 KeepAlive=On
ProxyPassReverse /b http://some_other_ip/

... and i do this for all my ProxyPass mappings

我可以以某种方式告诉 Apache为所有映射添加timeout和参数吗?提前致谢。KeepAlive


编辑:我也尝试过使用mod_reqtimeout指令,但它对我来说不起作用:

LoadModule reqtimeout_module modules/mod_reqtimeout.so

RequestReadTimeout header=1200 body=1200

答案1

我已经设法自己找到了解决方案。您可以直接使用以下ProxyTimeout指令设置超时mod_proxy

ProxyRequests On 
<Proxy *>
    AddDefaultCharset off
    Order deny,allow
    Allow from all
</Proxy>
ProxyPreserveHost Off

ProxyTimeout 1200

答案2

根据 Apache 文档,如果代理超时配置指令是未指定,全局/vhost 设置暂停被使用并有效。因此,如果后端花费的时间超过暂停秒后,Apache 将关闭连接(!)。

因此即使代理超时默认值为 300 秒,无论如何您都需要指定它以确保它有效。

相关内容