2台のapacheサーバーの前にロードバランサーとして構成されたapache(2.4)サーバーを使用しています。ロードバランサーとバックエンドの間でhttp接続を使用すると正常に機能しますが、httpsを使用しても機能しません。ロードバランサーの構成:
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
<Proxy balancer://testcluster>
BalancerMember https://[Backend1]:443/test
BalancerMember https://[Backend2]:443/test
</Proxy>
ProxyPass /test balancer://testcluster
現在のところ、バックエンドには自己署名証明書しかありません。そのため、証明書の検証は無効になっています。
ロードバランサーのエラーログには次が含まれます。
[proxy:error] [pid 31202:tid 140325875570432] (502)Unknown error 502: [client ...] AH01084: pass request body failed to [Backend1]:443 ([Backend1])
[proxy:error] [pid 31202:tid 140325875570432] [client ...] AH00898: Error during SSL Handshake with remote server returned by /test/test.jsp
[proxy_http:error] [pid 31202:tid 140325875570432] [client ...] AH01097: pass request body failed to [Backend1]:443 ([Backend1]) from [...] ()
ブラウザーのエラーページには以下が含まれます。
Proxy Error
The proxy server could not handle the request GET /test/test.jsp.
Reason: Error during SSL Handshake with remote server
前述のように、構成をhttpプロトコルに変更すると、ポート80が機能します。クライアントとロードバランサー間のhttps接続も機能するため、ロードバランサーのsslモジュールが適切にセットアップされているようです。httpsを介してバックエンドに直接接続しても、エラーは発生しません。
お時間をいただきありがとうございます
編集:私はそれを考え出した、問題は私の証明書の共通名がサーバー名と一致しないことです。SSLProxyVerify noneは、この不一致を無視すると考えていましたが、無視しませんでした。Apache 2.4.5より前は、SSLProxyCheckPeerCN offを使用してこのチェックを無効にできますが、上位バージョン(2.4.7を使用しています)ではSSLProxyCheckPeerName offも指定する必要があります。
sslproxycheckpeernameのApacheドキュメント
作業構成は次のようになります。
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
<Proxy balancer://testcluster>
BalancerMember https://[backend1]:443/test
BalancerMember https://[backend1]:443/test
</Proxy>
ProxyPass /test balancer://testcluster
残念ながら、評判が悪いために自分の質問に答えることができないので、質問を編集しました。これは、同様の問題に遭遇した人の助けになることを願っています