web-dev-qa-db-ja.com

Apacheプロキシタイムアウト

Apache 2.2 error_logの次のメッセージで何が起こっているのかを理解しようとしています:

Wed May 18 21:03:29 2011] [error] [client 172.20.10.10] (70007)The timeout specified has expired: proxy: error reading status line from remote server super-load1-ga.test.com, referer: https://tester2.test.com/boom/ga/inside.as p

Apache 2.2とmod_proxyを実行しています。このApacheは、httpd.confの5分のTimeOut値に関連してリクエストをタイムアウトしていますか? (5分以内にリモートサーバーからの応答を受信しないことを意味します。)または、これは単に接続を処理できないというリモートサーバーからの応答ですか。

Apacheは、このエラーが発生する頃に、MaxClientsをすぐに使い果たします。

プロキシエントリの簡単な例:

ProxyPass /boom/ga https://super-load1-ga.test.com
ProxyPassReverse /boom/ga https://super-load1-ga.test.com
21
roacha

ProxyPassディレクティブでタイムアウトを増やします。

ProxyPass /boom/ga https://super-load1-ga.test.com connectiontimeout=300 timeout=300

タイムアウト値はsecondsです。

https://super-load1-ga.example.comのサーバーからの応答に時間がかかりすぎているようです。

そのシナリオでは、それがそこにあるだけであれば、Apacheプロセスはそれを待ちます。そのプロセスは基本的にブロックされています。つまり、他に何もできません。すぐにタイムアウトしないと、Apacheプロセスが不足し、MaxClientsにヒットしてしまいます。

Super-load1-ga.test.comサイトにログを記録して、リクエストの所要時間を確認する必要があります。

ProxyPass接続のタイムアウトを短縮できる可能性があります

http://httpd.Apache.org/docs/current/mod/mod_proxy.html#workers

5
Philip Reynolds

あなたの質問に答えるために、はい、プロキシモードのApache2 httpdは、Apache2 httpdがタイムアウトになったときにそのエラーメッセージをログに記録します。プロキシモードでApache2 httpdに接続されているサーバーが原因の場合は、別のメッセージが表示されます。

メッセージには複数の部分があります:The timeout specified has expiredAPR_TIMEUPエラーコードに相当するテキストです。以下を参照してください:

srclib/apr/misc/unix/errorcodes.c

case APR_TIMEUP:
    return "The timeout specified has expired";

次にproxy: error reading status line from remote server super-load1-ga.test.com

modules/proxy/mod_proxy_http.c

ログレベルをAPLOG_DEBUGに上げると、追加のメッセージproxy: read timeoutも表示されます。

3
user67717