使用mod_proxy对SOAP服务进行反向代理时出现间歇性错误


17

使用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

这将导致请求失败。如果我不使用代理将客户端直接连接到Soap服务器,则成功率为100%,因此问题似乎出在代理中

配置看起来像这样。目的是在主服务器不可用时切换到备份服务器:

<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 

有没有人遇到这个问题并找到解决方法?错误报告中有一些提及,但没有解决方案。唯一可能与众不同的是,客户端请求可能是100MB或更大,因此该请求所花的时间可能比SOAP调用所期望的时间长一点。


David Purdue的答案(SetEnv proxy-initial-not-pooled 1)如今是一个有效的答案(2016年)。
MattBianco

Answers:



5

在此处记录Apache文档:http : //httpd.apache.org/docs/2.2/mod/mod_proxy_http.html

似乎在mod_proxy_http中存在争用条件,但可以通过以下方法避免这种情况:

SetEnv proxy-initial-not-pooled 1

如果这是初始请求,则可以防止Apache使用池化连接。

该文档确实注意到此设置将降低性能。


1
proxy-initial-not-pooled仅当您具有特定的补丁程序时才有效,我相信这不是httpd 2.2的一部分。我不知道httpd 2.4。参见bz.apache.org/bugzilla/show_bug.cgi?id=37770#c88
kubanczyk '16

0

您还可以AH01102: error reading status line from remote server通过使用apache模块mod_reqtimeout和以下conf指令来消除此相关错误消息():

RequestReadTimeout header=30

您可能必须启用reqtimeout模块,如下所示:

$ sudo a2enmod reqtimeout
$ sudo apache2ctl restart
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.