Wie konfiguriere ich mod_proxy für ProxyPass basierend auf http vs https?

9

Ich habe Apache Tomcat mit aktiviertem SSL ausgeführt. Ich habe Apache HTTP Server als Reverse-Proxy. Wenn Benutzer auf http: // myserver / tomcat / klicken, werden sie an http: // myserver: 8080 übergeben .

ProxyPass /tomcat/ http://myserver:8080/
ProxyPassReverse /tomcat/ http://myserver:8080/

Ich habe den Apache HTTP-Server auch für SSL konfiguriert. Wenn Benutzer auf https: // myserver / tomcat / klicken , sollten sie an https: // myserver: 8443 / übergeben werden .

Mit der aktuellen ProxyPass- und ProxyPassReverse-Konfiguration werden sie an die Nicht-SSL-URL umgeleitet. Wie kann ich den Proxy-Pass so einrichten, dass er basierend auf der eingehenden Anforderung zu einem anderen Protokoll und Port umleitet?

Das heißt, wenn jemand über HTTPS hereinkommt, wie kann ich ihn dann zu meinem Tomcat @ https: // myserver: 8443 umleiten ?


Aktualisieren:

@ Mike-Insch

Ich habe es versucht:

NameVirtualHost *:443

<VirtualHost *:80>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>

<VirtualHost *:443>
    ProxyPass /tomcat/ https://myserver:8443/
    ProxyPassReverse /tomcat/ https://myserver:8443/
</VirtualHost>

Wenn ich jetzt: https: // myserver / tomcat / besuche, erhalte ich "Seite nicht gefunden". Im Fehlerprotokoll wird "Datei existiert nicht: / var / apache2 / htdocs / tomcat" angezeigt.

Was richtig ist, aber ich habe erwartet, dass die Anfrage an Tomcat weitergeleitet wird, das unter https: // myserver: 8443 / ausgeführt wird .

Ich schätze, ich muss mir die virtuellen Hosts genauer ansehen, es sei denn, etwas sieht auffällig falsch aus.

Codecraig
quelle
Ich glaube nicht, dass Sie die NameVirtualHostRichtlinie hier brauchen . Außerdem müssen Sie die entsprechenden Anweisungen hinzufügen, um SSL in Ihrem <VirtualHost *:443>Abschnitt zu aktivieren .
Mike Insch

Antworten:

5

Sie müssen dies über zwei unabhängige <VirtualHost *:X>Anweisungen tun . Ihre HTTPAnweisungen gehen hinein, <VirtualHost *:80>während Ihre HTTPSAnweisungen hineingehen <VirtualHost *:443>. Passen Sie diese nach Bedarf an, wenn auf Ihrem Server mehrere adressbasierte oder namenbasierte virtuelle Hosts konfiguriert sind. Ausführliche Informationen finden Sie in der Apache 2-Dokumentation.

Mike Insch
quelle
Also habe ich folgendes hinzugefügt: NameVirtualHost *: 443
Codecraig
3
Vergessen Sie nicht, die SSLProxyEngine zur Direktive hinzuzufügen
Ryan
6

Der Vollständigkeit halber: Wenn dies eine Option ist, ist es eine gute Idee, SSL bei Apache zu beenden, anstatt Tomcat auch damit zu beauftragen. Die Bereitstellung von Tomcat nur über Apache ist einfacher und nicht weniger sicher.

In diesem Setup würde Apache HTTP und HTTPS an Folgendes weitergeben http://myserver:8080/:

NameVirtualHost *:443

<VirtualHost *:80>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>

<VirtualHost *:443>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>
David Carboni
quelle
1
In diesem Fall müssen Sie die Proxy-Anweisungen in beiden VirtualHosts nicht wiederholen. Sie können sie einfach in den Serverkontext ziehen.
Amit Naidu