mic.we
Goto Top

Apache 2.4 als reverseProxy - mein.webserver.de - interne Weiterleitung funktioniert nicht

Hallo liebe Apache Pro's,

ich habe zwar eine gewisse Erfahrung im Umgang mit dem Apache (auf Linux) würde mich aber nicht als einen Pro bezeichnen und habe aktuell ein Problem, bei dem ich nicht weiterkomme.


Ich habe einen Apache Webserver (mein.Webserver.de) der als Reverse Proxy fungiert. Dieser ist über Port 443 (HTTPS) erreichbar.
Auf einem weiteren Server, der nicht aus dem Web erreichbar ist habe ich einen embedded Tomcat der auf dem Port 8080 verschiedene Contexte bereit stellt.
Darüber hinaus startet dieser Webserver (interner.tomcat.Server) auf dem Port 20443 selbst einen Dienst.

mit folgender verkürzter Konfiguration funktioniert die Bereitstellung der Contexte (8080)
ProxyPass                   /     http://interner.tomcat.Server:8080/    nocanon    connectiontimeout=10    timeout=60
ProxyPassReverse        /     http://interner.tomcat.Server:8080/

Bein Aufruf von https://mein.Webserver.de/context1 leitet der Apache ordnungsgemäß an den internen Tomcat auf Port 8080 weiter.

Nun muss ich aber auch der zusätzliche Dienst (interner.tomcat.Server:20443) auf dem Apache bereitstellenen und zwar ebenfalls über der Standard-HTTPS.

Meine Idee war nun, ich erfinde einen Context - dieser existiert weder im Apache noch im Tomcat - also einen virtuellen Context würde ich den mal nennen und benutze den um auf den internen zusätzlichen Dienst weiterzuleiten.
In der Apache-Konfiguration habe ich folgendes probiert.

   <Location "/virtualcontext/">  
      ProxyPass                    http://interner.tomcat.Server:20443/ nocanon connectiontimeout=10 timeout=60
      ProxyPassReverse      http://interner.tomcat.Server:20443/
   </Location>

Ich will also mit dem Aufruf von https://mein.Webserver.de/virtualcontext/ auf der internen URL http://interner.tomcat.Server:20443/ landen.

Das funktioniert leider nicht, intern wird die URL http://interner.tomcat.Server:20443/virtualcontext/ aufgerufen.


Ich hoffe es gibt jemanden der mir hier helfen kann und einen Tipp hat. Ist ne wichtige Sache, die ich unbedingt hinbekommen muss.


Vielen Dank schon einmal, und hoffentlich bis demnächst

Content-ID: 476488

Url: https://administrator.de/contentid/476488

Ausgedruckt am: 21.11.2024 um 16:11 Uhr

Dani
Dani 23.07.2019 aktualisiert um 18:32:21 Uhr
Goto Top
Moin,
grundsätzlich richtet man heutzutage ein Force SSL ein. Sprich alle HTTP Aufrufe werden serverseitig auf HTTPS umgeleitet. Das macht du wohl schon - GUT!

Bein Aufruf von https://mein.Webserver.de/context1 leitet der Apache ordnungsgemäß an den internen Tomcat auf Port 8080 weiter.
Das funktioniert wahrscheinlich, weil es auf dem Tomcat das Verzeichnis context1 gibt?! Das geht aus deiner Beschreibung leider nicht hervor. Dahe rate ich einfach...

Das funktioniert leider nicht, intern wird die URL http://interner.tomcat.Server:20443/virtualcontext/ aufgerufen.
Logisch, weil auf dem Tomcat das Verzeichnis virtualcontext nicht existiert.

Probier es so:
ProxyPass                    /virtualcontext http://interner.tomcat.Server:20443/ nocanon connectiontimeout=10 timeout=60
ProxyPassReverse      /virtualcontext http://interner.tomcat.Server:20443/
Ungetestet, da ich als ReverseProxy hauptsächlich mit Nginx zu tun hatte. face-wink
Die Direktive Location kannst du wegelassen.


Gruß,
Dani
mic.we
mic.we 23.07.2019 um 18:24:15 Uhr
Goto Top
Hi Dani,

danke erst mal für Deine schnelle Antwort. Ich wollte meine Problem nicht in einem Buch niederschreiben, daher habe ich versucht nur die wichtigsten Infos einzubringen, Deine Schlussfolgerungen waren aber vollkommen richtig.

Zu Deinem Tip.
Aus der Apache - Doku habe ich heraus gelesen, dass es eigentlich das Gleiche ist ob man die Directive Locationverwendet oder Deine Variante wählt. Einziger Unterschied ist wohl dann die Gewichtung der einzelnen Konfigurationen.

Hier ist dann die Reihenfolge zu beachten.

ProxyPass                  /virtualcontext      http://interner.tomcat.Server:20443/      nocanon connectiontimeout=10 timeout=60
ProxyPassReverse   /virtualcontext       http://interner.tomcat.Server:20443/

ProxyPass                 /     http://interner.tomcat.Server:8080/    nocanon    connectiontimeout=10    timeout=60
ProxyPassReverse   /     http://interner.tomcat.Server:8080/



Der Context "virtualcontext" existiert auf dem Tomcat nicht, das ist richtig.
Es soll ja / an den 8080 weitergeleitet werden, daher war die Idee mit dem nicht vorhandenen Context (vitualcontext) auf den Port 20443 direkt weiterzuleiten.
Ich weiß leider nicht, ob meine Idee so überhaupt richtig ist, vielleicht geht das so gar nicht?

Die Konfiguration oben habe ich noch probiert, leider nicht von Erfolg gekrönt.

lg
Dani
Dani 23.07.2019 aktualisiert um 18:42:36 Uhr
Goto Top
Moin,
Es soll ja / an den 8080 weitergeleitet werden, daher war die Idee mit dem nicht vorhandenen Context (vitualcontext) auf den Port 20443 direkt weiterzuleiten.
Danke für den Denkanstoß... da war ein Knoten in meinem Kopf. face-smile
Versuch es einmal so:
...
<Location /virtualcontext>
ProxyPass http://interner.tomcat.Server:20443/
ProxyPassReverse http://interner.tomcat.Server:20443/
</Location>
...
Nach wie vor ungetestet. face-wink


Gruß,
Dani
mic.we
mic.we 24.07.2019 um 15:09:41 Uhr
Goto Top
Hi Dani,

nun habe ich wohl alle Varianten durchgetestet. Leider ohne Erfolg.

Ich danke Dani für die Versuche zu helfen.

lg
Dani
Dani 24.07.2019, aktualisiert am 25.07.2019 um 12:43:03 Uhr
Goto Top
Moin,
nachdem ich vorher ein bisschen Zeit hatte, habe ich unter Ubuntu 18.04.2 LTS einen Apache2 und Apache Tomcat aufgesetzt. Mein Tomcat lauscht auf Port 8080 und mein Apache2 auf Port 80. Meine oben geposteten Zeilen funktionieren bei mir in der Default Site ohne HTTPS problemlos. Hast du den Apache2 nach der Konfigurationsanpassung neu gestartet?


Gruß,
Dani