私は、Apache 2.2の背後にある専用のロードバランサーとしてHAProxyを実行することをテストしており、Apacheのロードバランサーを使用する現在の構成を置き換えています。現在のApacheのみでは、すべてのバックエンド(Origin)サーバーがダウンしている場合にセットアップすると、Apacheは503サービスを利用できませんというメッセージを表示します。 HAProxyを使用すると、502の不正なゲートウェイ応答が返されます。
Apacheで単純なリバースプロキシ書き換えルールを使用しています
RewriteRule ^/(.*) http://127.0.0.1:8000/$1 [last,proxy]
HAProxyには、次のものがあります(デフォルトのtcpモードで実行)
defaults
log global
option tcp-smart-accept
timeout connect 7s
timeout client 60s
timeout queue 120s
timeout server 60s
listen my_server 127.0.0.1:8000
balance leastconn
server backend1 127.0.0.1:8001 check observe layer4 maxconn 2
server backend1 127.0.0.1:8001 check observe layer4 maxconn 2
バックエンドサーバーがダウンしているときにロードバランサーに直接接続するテスト:
[root@dev ~]# wget http://127.0.0.1:8000/ test.html
--2012-05-28 11:45:28-- http://127.0.0.1:8000/
Connecting to 127.0.0.1:8000... connected.
HTTP request sent, awaiting response... No data received.
したがって、おそらくこれは、HAProxyが接続を受け入れてから閉じるという事実に起因します。
私はこれをtcpモードで動作させることができませんでしたが、httpモードに切り替えると503を取得します
defaults
mode http
TCPモードでは、haproxyはステータスコードを出力しないため、残りのポイントは明らかにApacheだけです。haproxyが接続を受け入れて閉じ、Apacheが502を返すためだと思います。期待されます。
したがって、観察している動作は正しいです。とにかく、一般的にはHTTPモードで作業する方が良いでしょう。また、非常に詳細なログを提供する「option httplog」を有効にし、haproxyでキープアライブを維持するApacheの機能を利用する「optionhttp-server-close」を有効にすることをお勧めします。これにより、ローカルソースポートの消費が大幅に削減されます。マシン上で。