Ich versuche, einen Server mit mehreren Webanwendungen einzurichten, die alle über Apache VirtualHost (Apache wird auf demselben Server ausgeführt) bereitgestellt werden. Meine Hauptbeschränkung ist, dass jede Webanwendung SSL-Verschlüsselung verwenden muss. Nachdem ich eine Weile gegoogelt und andere Fragen zum Stackoverflow untersucht hatte, schrieb ich die folgende Konfiguration für den VirtualHost:
<VirtualHost 1.2.3.4:443>
ServerName host.example.org
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / https://localhost:8443/
ProxyPassReverse / https://localhost:8443/
</VirtualHost>
Auf https://host.example.org:8443 kann zwar zugegriffen werden, nicht jedoch auf https://host.example.org , was den Zweck meiner virtuellen Hostkonfiguration beeinträchtigt. Firefox beschwert sich, dass die Verbindung unterbrochen wurde, obwohl die Verbindung zum Server erfolgreich hergestellt wurde. Ich erhalte auch die folgende Warnung in Apaches error.log:
proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be host.example.org for uri
In der Webanwendung (einem Tomcat-Server) zeigt das Zugriffsprotokoll eine ungewöhnliche Zugriffsanforderung an:
"?O^A^C / HTTP/1.1" 302
Das Folgende ist die korrekte Zugriffsanfrage, die ich erhalte, wenn ich mich direkt mit https://host.example.org:8443 verbinde :
"GET / HTTP/1.1" 302
Abschließend sollte ich noch erwähnen, dass der virtuelle Host einwandfrei funktioniert, wenn ich kein SSL verwende.
Wie kann ich das schaffen?
quelle
ProxyPreserveHost On
Sie, dass es fast immer falsch, nutzlos und fast immer kaputt istProxyPassReverse
. Als RandnotizProxyRequests off
ist die Voreinstellung somit überflüssig.localhost
funktioniert dies nicht.Probieren Sie diese Konfiguration
Wenn Ihre Anwendung über die Proxy-Verbindung auf die SSL-Informationen zugreifen muss, sollten Sie die Verwendung von mod_proxy_ajp und des Tomcat-Connectors ajp1.3 in Betracht ziehen.
quelle
Wenn Sie jedoch mehrere SSL-fähige Webanwendungen auf demselben Server ausführen möchten. Wenn Sie Apache in Front hinzufügen, werden sie mit der obigen Konfiguration nicht ausgeglichen. Sie benötigen weiterhin einen Load Balancer.
quelle
Was ich hier nicht verstehe, ist, warum Sie eine SSL-Verbindung von Ihrem Apache zu Ihrer Anwendung benötigen, die sich anscheinend auf demselben Computer befindet ( http: // localhost: 8443 / ).
Ich vermute, die übliche Art, solche Dinge einzurichten, besteht darin, dass Apache dem "Kunden" eine SSL-Verschlüsselung zur Verfügung stellt, z. B. das Internet, und eine unverschlüsselte Verbindung zur Anwendung hat. Dies gibt Ihnen auch mehr Freiheit beim Debuggen Ihrer Anwendungsantworten.
Die andere Sache, die Dave Cheney erwähnte, ist die Verwendung des nativen Tomcat-Connectors, um einen Lastenausgleich und andere Funktionen zu erhalten.
quelle
Müssen Sie wirklich einen Proxy für einen HTTPS-Dienst einrichten? Möglicherweise möchten Sie dem Nicht-SSL-Dienst in localhost einen Proxy zuweisen, z
quelle
Zuerst würde ich schauen, ob Sie eine Anfrage von localhost an localhost machen können: 8443 und sehen, ob das erfolgreich ist (IE tun ein GET oder wget http: // localhost: 8443 )
Ich bin mir nicht ganz sicher, warum Ihr virtueller Host Port 443 abhört und ihn dann an einen anderen SSL-Host weiterleitet
warum kann man die anwendung nicht einfach 443 nativ nutzen? Wenn Sie es nicht ändern können, können Sie einfach iptables verwenden, um den Port umzuleiten
quelle
Überprüfen Sie Ihr SSL-Fehlerprotokoll und stellen Sie sicher, dass Sie keine Fehler haben, weil Sie die CA-Zertifikatkette nicht überprüfen können.
quelle