web-dev-qa-db-ja.com

Apache proxypassディレクティブがすぐに回復しない

この「単純な」Apache ProxyPassディレクティブを使用しています。

<VirtualHost *:80>
    ProxyPreserveHost On    
    ProxyPass / http://0.0.0.0:3000/
    ProxyPassReverse / http://0.0.0.0:3000/
    ServerName my.name.org
</VirtualHost>

これはうまく機能します。ポート3000でリッスンしている内部サーバーが一時的に「ダウン」し、「my.name.org」にリクエストを行うと、503が期待どおりに返されます。ただし、内部サーバーが起動しても、「my.name.org」への後続のリクエストは「一定期間」503になります(一方、503を生成する初期リクエストが発生しない場合、後続のリクエストは通常​​どおり動作しません)。内部サーバーを再起動した後、Apacheがそれに気づき、より迅速に使用できるように調整できる値はありますか?

2
rogerdpack

バックエンドサーバーへの接続が生成され、エラーが発生した場合(デフォルトは5xxコード)、Apacheはその接続をError Stateとしてマークします。 Apacheは、retryProxyPassパラメーターによって制御される期間、その接続を使用しません。デフォルトは60秒です。

つまり、変更しない限り、バックエンドが5xxリターンコードを生成すると、Apacheは60秒間リクエストを送信しませんが、すぐにクライアントブラウザーに503を返します。

これを変更するには、retryを小さい数値に設定します。たとえば、再試行する前に5秒だけ待機する場合:

ProxyPass / http://0.0.0.0:3000/ retry=5

このオプションおよびその他の多くの詳細は、次のProxyPassドキュメントにあります。 https://httpd.Apache.org/docs/current/mod/mod_proxy.html#proxypass

3
Unbeliever