Я использую сервер apache (2.4), настроенный как балансировщик нагрузки, перед двумя серверами apache. Он отлично работает, когда я использую http-соединения между loadbalancer и бэкэндами, однако использование 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 тоже не вызывает ошибок.
Спасибо заранее за ваше время
Документация 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
К сожалению, я не могу ответить на свой вопрос из-за отсутствия репутации, поэтому я отредактировал свой вопрос, надеюсь, это поможет любому, кто сталкивается с подобной проблемой.
Проблема оказалась в том, что общее имя сертификатов не совпадало с именем сервера.
До 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
Ты можешь проверьте версию Apache, которая у вас установлена с участием:
apachectrl -V
Добавление ниже решило проблему
SSLProxyProtocol +TLSv1
Я использую apache 2.4.9 и добавляю в httpd-ssl.conf следующий код
SSLProxyProtocol + SSLv3 + TLSv1 + TLSv1.1
я решил проблемы