У меня есть сервер, который действует как интерфейс для почтового сервера cPanel в сети. Прокси-сервер apache на интерфейсном сервере работал 152 дня без сбоев, а затем внезапно я получаю 500/502 ошибок при использовании его для доступа к клиентам веб-почты почтового сервера.
Внешний сервер использует подписанный сертификат SSL, сервер cPanel использует самоподписанный сертификат. Вот журнал ошибок, выводимый интерфейсным сервером при его первом запуске:
[Tue Sep 10 18:22:52.959291 2013] [proxy:error] [pid 19531] (502)Unknown error 502: [client 173.xx.xx.xx:9558] AH01084: pass request body failed to 184.xx.xx.xx:2096 (184.xx.xx.xx), referer: https://domain.com:2096/cpsess12385596/3rdparty/roundcube/?_task=mail&_refresh=1&_mbox=INBOX
[Tue Sep 10 18:22:52.959469 2013] [proxy:error] [pid 19531] [client 173.xx.xx.xx:9558] AH00898: Error during SSL Handshake with remote server returned by /cpsess12385596/3rdparty/roundcube/, referer: https://domain.com:2096/cpsess12385596/3rdparty/roundcube/?_task=mail&_refresh=1&_mbox=INBOX
Интерфейсный сервер - это экземпляр EC2, работающий Apache/2.4.6 (Amazon)
Моя настройка VirtualHost для прокси на этом сервере выглядит следующим образом:
< VirtualHost *:2096>
ServerName domain.com
SSLEngine on
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLCertificateFile /x/x/x/domain.com.crt
SSLCertificateKeyFile /x/x/x/domain.com.key
SSLCACertificateFile /x/x/x/domain.com.cabundle
ProxyPass / https://184.xx.xx.xx:2096/
ProxyPassReverse / https://184.xx.xx.xx:2096/
ProxyPassReverseCookieDomain 184.xx.xx.xx:2096 domain.com
ProxyPassReverseCookiePath / /
SetOutputFilter INFLATE;proxy-html;DEFLATE
ProxyHTMLURLMap https://184.xx.xx.xx:2096 /
< /VirtualHost>
Насколько я могу судить, на интерфейсном сервере ничего не изменилось, я не делал никаких обновлений или чего-то еще, как только заметил эту проблему и возился безуспешно, я попытался перезапустить оба сервера, но ничего не помогло.
Какие-либо предложения?
Возникла та же проблема с версией сервера: Apache / 2.4.6
Согласно документации на [1], "В 2.4.5 и более поздних версиях SSLProxyCheckPeerCN был заменен SSLProxyCheckPeerName, и его настройка учитывается только тогда, когда SSLProxyCheckPeerName отключен одновременно.. "
Таким образом, добавление следующей записи помогло:
SSLProxyCheckPeerName выключен
Итак, мой рабочий конфиг выглядит так ...
ProxyRequests Off
SSLEngine On
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLCertificateFile /x/x/keys/server.crt
SSLCertificateKeyFile /x/x/keys/server.key
Если внутренний сервер использует устаревший самоподписанный сертификат, потребуется еще один вариант (если нет доступа к внутреннему серверу):
SSLProxyCheckPeerExpire off
Я также получаю ту же ошибку, но в моем случае принятый ответ здесь решил эту ошибку: https://stackoverflow.com/questions/47718508/apache-proxypass-https-and-remote-server-with-sni
я добавил
ProxyAddHeaders off
ProxyPreserveHost off