web-dev-qa-db-ja.com

mod_proxyを使用してSOAPサービスにリバースプロキシを実行する場合、断続的なエラーが発生する

SOAP Webサービスへのリバースプロキシとしてmod_proxyを使用すると、数分ごとにこのエラーが発生します。 1秒あたり3または4のリクエストが送信される可能性があるため、このエラーが発生する1000ごとに約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呼び出しで予想されるよりも少し長くかかることがあります。

18
JOTN

他の誰かがこれに遭遇した場合。これはmod_proxyのバグで、httpd.confに次の行を入れることで回避できます。

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

https://issues.Apache.org/bugzilla/show_bug.cgi?id=3777

これらの変数の機能については、 mod_proxyドキュメント 。それらには、これらの変数に対処する特定のセクション「プロトコル調整」があります。

28
JOTN

ここのApacheドキュメントに注意してください: http://httpd.Apache.org/docs/2.2/mod/mod_proxy_http.html

Mod_proxy_httpに競合状態があるようですが、以下を含めることで回避できます。

SetEnv proxy-initial-not-pooled 1

これが最初のリクエストである場合、Apacheがプールされた接続を使用するのを防ぎます。

このドキュメントでは、この設定によりパフォーマンスが低下することが記載されています。

5
David Purdue

この関連エラーメッセージ(AH01102: error reading status line from remote server)Apacheモジュールmod_reqtimeoutとこのconfディレクティブを使用する:

RequestReadTimeout header=30

次のように、おそらくreqtimeoutモジュールを有効にする必要があります。

$ Sudo a2enmod reqtimeout
$ Sudo Apache2ctl restart
0
Martlark