Я использую сервер apache (2.4), настроенный в качестве loadbalancer перед двумя серверами apache. Он отлично работает, когда я использую http-соединения между loadbalancer и backends, однако использование 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
Бэкэнды имеют только самозаверяющие сертификаты, поэтому проверка сертификата отключена.
Журнал ошибок на loadbalancer содержит следующее:
[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-соединения между клиентом и loadbalancer работают, поэтому модуль ssl loadbalancer, похоже, настроен правильно. Подключение напрямую к бэкэнду через https также не приводит к ошибкам.
Спасибо заранее за ваше время
Изменить: я понял, проблема в том, что общее имя моих сертификатов не совпадает с именем сервера. Я думал, что SSLProxyVerify none не приведет к игнорированию этого несоответствия, но это не так. До apache 2.4.5 эта проверка может быть отключена с помощью SSLProxyCheckPeerCN off, но в более высоких версиях (я использую 2.4.7) SSLProxyCheckPeerName off также необходимо указать.
Apache документация для sslproxycheckpeername
Рабочая конфигурация выглядит так:
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
К сожалению, я не могу ответить на свой вопрос из-за отсутствия репутации, поэтому я отредактировал свой вопрос, я надеюсь, что это поможет всем, кто сталкивается с подобной проблемой