当使用mod_proxy作为SOAP Web服务的反向代理时,我每隔几分钟就会得到一个错误。 每秒可能有3或4个请求,所以我们在每千个有1个或2个这样的错误。
[Tue Nov 23 11:44:14 2010] [error] [client 172.16.1.31] (20014)Internal error: proxy: error reading status line from remote server soap1.server:8888 [Tue Nov 23 11:44:14 2010] [error] [client 172.16.1.31] proxy: Error reading from remote server returned by /someapp/path/to/web/service
这会导致请求失败。 如果我有客户端直接连接到肥皂服务器而不使用代理,成功是100%,所以问题似乎在代理中
configuration看起来像这样。 如果主服务器不可用,则切换到备份服务器:
<Proxy balancer://apicluster> BalancerMember http://soap1.server:8888 lbset=0 BalancerMember http://soap2.server:8888 lbset=1 </Proxy> ProxyPass /someapp balancer://apicluster/someapp ProxyPassReverse / balancer://apicluster/someapp
有没有人遇到这个,find一个修复? 错误报告中有一些提到,但没有解决scheme。 唯一可能不寻常的是客户端请求可能是100MB或更大,所以请求可能比您期望的SOAP调用花费更长的时间。
如果有人遇到这种情况。 这是mod_proxy中的一个bug,可以通过将这些行放在httpd.conf中来避免这个错误:
SetEnv force-proxy-request-1.0 1 SetEnv proxy-nokeepalive 1
https://issues.apache.org/bugzilla/show_bug.cgi?id=37770
有关这些variables所做的信息,请参阅mod_proxy文档 。 他们有一个特定的部分,协议调整,解决这些variables。
注意这里的Apache文档: http : //httpd.apache.org/docs/2.2/mod/mod_proxy_http.html
似乎在mod_proxy_http中有一个竞争条件,但是可以通过包含以下内容来避免:
SetEnv proxy-initial-not-pooled 1
如果这是一个初始请求,这可以防止Apache使用池连接。
该文件确实注意到这个设置会导致性能降级。