Apache-2.2

使用 mod_proxy 對 SOAP 服務進行反向代理時出現間歇性錯誤

  • June 19, 2020

使用 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%,因此問題似乎出在代理中

配置看起來像這樣。目的是在主伺服器不可用時切換到備用伺服器:

<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 呼叫更長的時間。

以防其他人遇到這種情況。這是 mod_proxy 中的一個錯誤,可以通過將這些行放在 httpd.conf 中來避免:

SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1

https://issues.apache.org/bugzilla/show_bug.cgi?id=37770

有關這些變數的作用的資訊,請參閱mod_proxy文件。他們有一個特定的部分,協議調整,解決這些變數。

請注意此處的 Apache 文件:http ://httpd.apache.org/docs/2.2/mod/mod_proxy_http.html

mod_proxy_http 中似乎存在競爭條件,但可以通過包括以下內容來避免:

SetEnv proxy-initial-not-pooled 1

如果這是初始請求,這會阻止 Apache 使用池連接。

該文件確實指出,此設置將導致性能降級。

引用自:https://serverfault.com/questions/206738