我有一台服务器,它充当网络中 cPanel 邮件服务器的前端。前端服务器上的 apache 代理运行了 152 天,没有出现任何故障,但突然间,当我使用它访问邮件服务器的 Web 邮件客户端时,出现了 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
前端服务器是运行Apache/2.4.6 (Amazon)
My VirtualHost 的 EC2 实例,该服务器上的代理设置如下:
< 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>
据我所知,前端服务器上没有任何变化,我没有进行任何更新或任何操作,一旦注意到此问题并且没有成功,我尝试在两台服务器上重新启动但没有成功。
有什么建议么?
答案1
遇到了与服务器版本相同的问题:Apache/2.4.6
根据[1]中的文档,“在 2.4.5 及更高版本中,SSLProxyCheckPeerCN 已被 SSLProxyCheckPeerName 取代,并且只有同时指定 SSLProxyCheckPeerName off 时才会考虑其设置“”。
因此添加以下条目就可以了:
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
答案2
如果后端服务器使用过时的自签名证书,则需要再增加一个选项(如果无法访问后端服务器):
SSLProxyCheckPeerExpire off
答案3
我也遇到了同样的错误,但就我而言,这里接受的答案解决了这个错误:https://stackoverflow.com/questions/47718508/apache-proxypass-https-and-remote-server-with-sni
我补充道
ProxyAddHeaders off
ProxyPreserveHost off
答案4
不要忘记在更新证书后重新启动后端服务器,以防它无法检测到证书文件是否已更新。因此您不需要设置该SSLProxyCheckPeerExpire off
指令。