Ich habe einen Server, der als Front-End für einen cPanel-Mailserver in einem Netzwerk fungiert. Der Apache-Proxy auf dem Front-End-Server lief 152 Tage lang fehlerfrei, dann bekomme ich plötzlich 500/502-Fehler, wenn ich ihn verwende, um auf die Webmail-Clients des Mailservers zuzugreifen.
Der Front-End-Server verwendet ein signiertes SSL-Zertifikat, der cPanel-Server verwendet ein selbst signiertes Zertifikat. Hier ist die Fehlerprotokollausgabe des Front-End-Servers, als das Problem zum ersten Mal auftrat:
[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
Der Front-End-Server ist eine EC2-Instanz. Apache/2.4.6 (Amazon)
Mein VirtualHost-Setup für den Proxy auf diesem Server ist wie folgt:
< 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>
Soweit ich weiß, hat sich auf dem Front-End-Server nichts geändert. Ich habe auch kein Update oder ähnliches durchgeführt. Als mir das Problem auffiel und ich erfolglos herumprobierte, versuchte ich einen Neustart auf beiden Servern, aber das hat das Problem nicht behoben.
Irgendwelche Vorschläge?
Antwort1
Dasselbe Problem trat bei der Serverversion auf: Apache/2.4.6
Gemäß der Dokumentation unter [1]: „In 2.4.5 und höher wurde SSLProxyCheckPeerCN durch SSLProxyCheckPeerName ersetzt und seine Einstellung wird nur dann berücksichtigt, wenn SSLProxyCheckPeerName off gleichzeitig angegeben wird.."
Das Hinzufügen des folgenden Eintrags hat also geholfen:
SSLProxyCheckPeerName aus
So sieht meine Arbeitskonfiguration aus ...
ProxyRequests Off
SSLEngine On
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLCertificateFile /x/x/keys/server.crt
SSLCertificateKeyFile /x/x/keys/server.key
Antwort2
Wenn der Backend-Server ein veraltetes selbstsigniertes Zertifikat verwendet, ist eine weitere Option erforderlich (wenn kein Zugriff auf den Backend-Server besteht):
SSLProxyCheckPeerExpire off
Antwort3
Ich erhalte auch denselben Fehler, aber in meinem Fall hat die hier akzeptierte Antwort diesen Fehler behoben:https://stackoverflow.com/questions/47718508/apache-proxypass-https-and-remote-server-with-sni
Ich fügte hinzu
ProxyAddHeaders off
ProxyPreserveHost off
Antwort4
Vergessen Sie nicht, den Back-End-Server nach der Erneuerung seiner Zertifikate neu zu starten, falls er nicht erkennt, ob die Zertifikatsdateien aktualisiert wurden. Sie müssen die SSLProxyCheckPeerExpire off
Direktive dann nicht mehr setzen.