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呼び出しで予想されるよりも少し長くかかることがあります。
他の誰かがこれに遭遇した場合。これは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
ドキュメント 。それらには、これらの変数に対処する特定のセクション「プロトコル調整」があります。
ここのApacheドキュメントに注意してください: http://httpd.Apache.org/docs/2.2/mod/mod_proxy_http.html
Mod_proxy_httpに競合状態があるようですが、以下を含めることで回避できます。
SetEnv proxy-initial-not-pooled 1
これが最初のリクエストである場合、Apacheがプールされた接続を使用するのを防ぎます。
このドキュメントでは、この設定によりパフォーマンスが低下することが記載されています。
この関連エラーメッセージ(AH01102: error reading status line from remote server
)Apacheモジュールmod_reqtimeoutとこのconfディレクティブを使用する:
RequestReadTimeout header=30
次のように、おそらくreqtimeoutモジュールを有効にする必要があります。
$ Sudo a2enmod reqtimeout
$ Sudo Apache2ctl restart