Korzystam z serwera Apache (2.4) skonfigurowanego jako moduł równoważenia obciążenia przed 2 serwerami Apache. Działa dobrze, gdy używam połączeń HTTP między loadbalancer i backendami, jednak używanie https nie działa. Konfiguracja modułu równoważenia obciążenia:
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
<Proxy balancer://testcluster>
BalancerMember https://[Backend1]:443/test
BalancerMember https://[Backend2]:443/test
</Proxy>
ProxyPass /test balancer://testcluster
Zaplecze ma na razie tylko samopodpisane certyfikaty, dlatego weryfikacja certyfikatu jest wyłączona.
Dziennik błędów modułu równoważenia obciążenia zawiera następujące elementy:
[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 [...] ()
Strona błędu w przeglądarce zawiera:
Proxy Error
The proxy server could not handle the request GET /test/test.jsp.
Reason: Error during SSL Handshake with remote server
Jak już wspomniałem powyżej, zmiana konfiguracji na protokół HTTP i port 80 działa. Również połączenia https między klientem a modułem równoważenia obciążenia działają, więc moduł ssl modułu równoważenia obciążenia wydaje się być poprawnie skonfigurowany. Łączenie bezpośrednio z backendem przez https również nie powoduje żadnych błędów.
Z góry dziękuję za poświęcony czas
Edycja: zorientowałem się, problem polega na tym, że nazwa zwyczajowa moich certyfikatów nie pasuje do nazwy serwera. Myślałem, że SSLProxyVerify none nie spowoduje zignorowania tego niedopasowania, ale tak nie jest. Przed Apache 2.4.5 to sprawdzenie można wyłączyć, wyłączając SSLProxyCheckPeerCN, ale w wyższych wersjach (używam 2.4.7) należy również wyłączyć SSLProxyCheckPeerName .
Dokumentacja Apache dla sslproxycheckpeername
Działająca konfiguracja wygląda następująco:
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
Niestety nie mogę odpowiedzieć na własne pytanie z powodu braku reputacji, więc zredagowałem swoje pytanie, mam nadzieję, że pomoże to każdemu, kto napotka podobny problem