Mod_proxyとmod_proxy_balancerを実行しているApache httpd Webサーバーがあります。/somedir全体が、ラウンドロビンスケジューラを使用してリクエストを処理する2つのワーカーマシンに送信されます。各ワーカーマシンは実行中IISですが、それは重要ではないと思います。
マシンのIPアドレスを含む単一のページを繰り返し要求することにより、ロードバランサーが機能していることを示し、予測可能なラウンドロビン方式であるページから別のページに切り替わることを確認できます。
IISサーバーの1つをオフにして同じページの要求を開始すると、各ページには稼働中のマシンのIPアドレスのみが含まれます。ただし、IISおよびmy IIS applicationを実行しない場合、/ somedirは500を返します(必要に応じて)。
Failonstatus(Apache 2.4)に500を追加したので、エラーが発生すると、Apacheはワーカーマシンをエラー状態にします。 Apacheはまだクライアントにプロキシエラーを返します。 Apacheにプロキシ障害をキャッチさせ、接続障害と同じ方法で別のワーカーを使用して再試行させるにはどうすればよいですか。
更新
StackOverflowでもほぼ同じ質問が寄せられるため、それらを結合します。
私はhttpdメーリングリストでDevと話しましたが、彼はこの機能が現在のコードベースに実装されていないことを確認しました。コードも自分で確認しました。 mod_proxy_balancer内のステートマシンはHTTPエラーで再試行できませんが、再試行できるのは接続エラーの場合のみです。自分で実装しようとしましたが、複雑すぎて、コードベースを簡単に不安定にする可能性があります。
したがって、この問題には今日の既知の解決策はありません...
誰かが再びこの質問に遭遇した場合に備えて:failonstatus
ディレクティブはApache 2.2.27から実装されました。
<Proxy balancer://backends>
BalancerMember http://10.1.1.11
BalancerMember http://10.1.1.12
ProxySet failonstatus=500
</Proxy>
ログ:
[Thu Apr 28 03:13:06.176916 2016] [proxy_balancer:error] [pid 3285:tid 140231873353472] [client 10.1.1.1:43608] AH01174: balancer://puppetmaster: Forcing worker (http://10.1.1.12) into error state due to status code 500 matching 'failonstatus' balancer parameter