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?
ProxyPreserveHost On
Sie, dass es fast immer falsch, nutzlos und fast immer kaputt istProxyPassReverse
. Als RandnotizProxyRequests off
ist die Voreinstellung somit überflüssig.