2つのTomcatサーバーの負荷分散を実行するために、以下の構成を使用しています。そして、SSL/TLSブリッジング/再暗号化を実行するようにHAProxyを構成しました。
#-------------------------------------------- ------------------------- #可能なWebアプリケーションの設定例。 #フル構成オプションをオンラインで参照してください。 # #http://haproxy.1wt.eu/download/1.4/doc/configuration.txt # #-------------------------------------------- ------------------------- #-------------- -------------------------------------------------- - - - # 全体設定 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - グローバル #これらのメッセージが/var/log/haproxy.logに記録されるようにするには、 #する必要があります: # #1)ネットワークログイベントを受け入れるようにsyslogを設定します。これは、 #のSYSLOGD_OPTIONSに「-r」オプションを追加することで行われます。 #/etc/sysconfig/syslog # #2)local2イベントを設定します/var/log/haproxy.log #ファイルに移動します。次のような行を に追加できます#/etc/sysconfig/syslog # #local2。* /var/log/haproxy.log # ログ127.0.0.1 local2 debug chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 ユーザーhaproxy グループhaproxy デーモン #統計を有効にするunixソケット 統計ソケット/ var/lib/haproxy/stats ssl-server-verify none #---------------------------- ----------------------------------------- #一般的なデフォルトすべての「listen」セクションと「backend」セクションは、 #ブロックで指定されていない場合に使用します #-------------------- ------------------------------------------------- デフォルト モードhttp ロググローバル オプションhttplog オプションdontlognull オプションhttp-server-close オプションforwardfor 127.0.0.0/8 オプションを除くredispatch 再試行3 タイムアウトhttp-request 10s タイムアウトキュー1m タイムアウト接続10s タイムアウトクライアント1m タイムアウトサーバー1m タイムアウトhttp-keep-alive 10s タイムアウトチェック10s maxconn 3000 #------------------------------- -------------------------------------- #にプロキシするメインフロントエンドバックエンド #------------------------------------------- -------------------------- frontend ft_main default_backend bk_main bind 192.168.192.175: 443 ssl crt /home/testuser/Software/Apache-Tomcat-7.0.32/keystore/haproxy-cert.pem no-sslv3 mode http #---- -------------------------------------------------- --------------- [._ ___。]#さまざまなバックエンド間のラウンドロビンバランシング #--------------------------------- ------------------------------------ backend bk_main balance roundrobin 再試行3 server srv01 192.168.192.173:8443 weight 1 maxconn 100 check no-sslv3 ssl verify none server srv01 192.168.192.174:8443 weight 1 maxconn 100 check no-sslv3 ssl verify none
サービスを開始すると、次のエラーが発生します
syslogd @ localhostからのメッセージ、8月17日17:06:12 ... haproxy [2593]:バックエンドbk_mainに使用可能なサーバーがありません!
そして、私は/var/log/haproxy.logで以下のログを観察しています
Aug 17 16:52:07 localhost haproxy [2495]:backend bk_main has no server available! Aug 17 16:52:25 localhost haproxy [2496]:120.117.50.250:52088 [17 /Aug/2015:16:52:25.084] ft_main〜bk_main/556/-1/-1/-1/556 503 212--SC-- 1/1/0/0/0 0/0 "GET/test /healcheck.jsp HTTP/1.1 " Aug 17 16:52:26 localhost haproxy [2496]:120.117.50.250:52089 [17/Aug/2015:16:52:25.336] ft_main〜bk_main/1044/-1/-1/-1/1044 503 212--SC-- 0/0/0/0/0 0/0 "GET /test/healcheck.jsp HTTP/1.1" 8月17日16: 52:27 localhost haproxy [2496]:120.117.50.250:52090 [17/Aug/2015:16:52:27.371] ft_main〜bk_main/268/-1/-1/-1/268 503 212--SC-- 1/1/0/0/0 0/0 "GET /test/healcheck.jsp HTTP/1.1" Aug 17 16:52:28 localhost haproxy [2496]:120.117.50.250:52091 [17/Aug/2015:16:52:27.623] ft_main〜bk_main/671/-1/-1/-1/671 503 212--SC-- 0/0/0/0/0 0/0 "GET/test/healcheck.jsp HTTP/1.1 " 8月17日16:52:29 localhost haproxy [2496]:120.117.50.250:52092 [17/Aug/2015:16:52:29.395] ft_main〜bk_main/273 /- 1/-1/-1/273 503 212--SC-- 1/1/0/0/0 0/0 "GET /test/healcheck.jsp HTTP/1.1" Aug 17 16:52: 30 localhost haproxy [2496]:120.117.50.250:52093 [17/Aug/2015:16:52:29.646] ft_main〜bk_main/701/-1/-1/-1/701 503 212--SC-- 0/0/0/0/0 0/0 "GET /test/healcheck.jsp HTTP/1.1" Aug 17 16:52:51 localhost haproxy [2496]:120.117.50.250:52094 [17/Aug/2015:16:52:51.268] ft_main〜bk_main/274/-1/-1/-1/274 503 212--SC-- 1/1/0/0/0 0/0 "GET/test/healcheck。 jsp HTTP/1.1 " Aug 17 16:57:15 localhost haproxy [2496]:192.168.192.168:54329 [17/Aug/2015:16:57:15.560] ft_main/1:SSL handshake failure 8月17日17:00:34 localhost haproxy [2538]:プロキシft_mainを開始しました。 8月17日17:00:34 localhost haproxy [2538]:プロキシbk_mainを開始しました。 8月17日:00:34 localhost haproxy [2538]:サーバーbk_main/srv01がダウンしています。理由:レイヤー6の無効な応答、情報:「SSLハンドシェイクの失敗」、チェック期間:30ms。残り0台のアクティブサーバーと0台のバックアップサーバーがあります。 0セッションがアクティブ、0リキュー、0キューが残っています。 Aug 17 17:00:34 localhost haproxy [2538]:backend bk_main has no server no available! Aug 17 17:06:12 localhost haproxy [2593]:Proxy ft_main started。 Aug 17 17:06:12 localhost haproxy [2593]:Proxy bk_main started。 Aug 17 17:06:12 localhost haproxy [2593]:Server bk_main/srv01がダウンしています。理由:レイヤー6の無効な応答、情報:「SSLハンドシェイクの失敗」、チェック期間:25ミリ秒。残り0台のアクティブサーバーと0台のバックアップサーバーがあります。 0セッションがアクティブ、0リキュー、0キューが残っています。 Aug 17 17:06:12 localhost haproxy [2593]:backend bk_main has no server no available!
上記のフラグにある「SC」フラグに基づいて、サーバー接続の確立に失敗したことを理解しています。ハンドシェイクの問題ですか?自己署名証明書を使用しています。そしてサーバーディレクティブで「何も検証しない」と述べたので、何が問題になるのでしょうか?
もちろん、自分でバックエンドへの接続を試してください:
openssl s_client -connect 192.168.192.173:8443
これにより、考えられる原因のほとんどを取り除くことができます。
S_clientは機能するがhaproxyが機能しない場合はどうなりますか? SELinux強制(たとえば、デフォルト設定のCentOS 7)でこれが正確に発生し、haproxyが任意のバックエンドポートに接続することを明示的に許可する必要があります。
setsebool -P haproxy_connect_any 1
/ etc/hostsファイルを確認し、インスタンス名がプロキシしているものと同じでないことを確認してください。通常、サーバーのホスト名を127.0.0.1に設定します