我们使用 Apache 和 Jetty 在防火墙后面安装组件。有些操作需要一段时间(10-15 分钟)。在某些机器上,Apache 是代理,Jetty 是代理目标。对于少于 5 分钟的操作,一切都运行正常。超过 5 分钟的操作会失败,并出现 502 代理错误。
我见过一些类似的主题,建议是定义超时和保持活动——但这两者都没有帮助。
我们的设置是:
Windows 2012R2 Apache 2.4.9 Jetty 7
最初我忘了提到 apache 和 Jetty 之间有防火墙。
在 apache httpd.conf 中我们有:
ProxyPassMatch ^/([a-z0-9\-]+)/(.+)$ http://$1:3000/$2 timeout=3000 ttl=3000 Keepalive=On
我们希望 timeout=3000(3000 秒)可以让 Apache 等待大约 50 分钟才能收到 Jetty 的响应。Keepalive 和 ttl 是试验...
在 Jetty 上,我们调用一个简单的 Groovy 脚本,该脚本只是静坐并等待很长时间。如果等待时间很短,则按预期工作。如果等待时间超过 5 分钟,我们会收到错误:
Apache Access:(请求开始于 17:25)
xxx.xxx.xxx.xxx- - [02/Apr/2016:17:25:47 +0200] "GET /server/scripts/waitlong.groovy HTTP/1.1" 502 445 "-" 300509428 "-" "10.119.1.20" 10.119.1.20 3000
如您所见,持续时间约为 5 分钟 ~ 300509428,因此超时 - 它应该持续 10 分钟。
Apache 错误:(请求于 17:30 超时)
[Sat Apr 02 17:30:47.815050 2016] [proxy_http:error] [pid 11656:tid 12736] (OS 10060)A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. : [client 10.119.1.20:60466] AH01102: error reading status line from remote server w-bidb1hf:3000
[Sat Apr 02 17:30:47.815050 2016] [proxy:error] [pid 11656:tid 12736] [client 10.119.1.20:60466] AH00898: Error reading from remote server returned by /w-bidb1hf/scripts/waitlong.groovy
有什么想法可以让 Apache 等待更长时间吗?
答案1
您可以尝试在正则表达式和 URL 周围使用引号,如Apache 文档,同时不带引号的键值对。
例子
ProxyPass "/示例" "http://backend.example.com“最大=20 TTL=120 重试=300
如果没有引号,服务器可能无法按照您的意图读取 ProxyPassMatch,也无法识别基本参数的结束位置和键值的开始位置。