Apache ProxyPass nach dynamischem Hostnamen

1742
JCS81

Ich versuche, Apache so zu konfigurieren, dass ein Proxy auf einem internen Server basiert, der auf dynamischen Hostnamen basiert und andere Ports verwendet. Es scheint mir ein bisschen zu kompliziert zu sein. Das ist was ich habe:

<Location /awesomewebapp> ProxyPass http://[internalservername]:8080/awesomewebapp ProxyPassReverse http://[internalservername]:8080/awesomewebapp </Location> 

Dies ist jedoch (offensichtlich) nicht dynamisch. Ich habe an Umschreibungsregeln usw. gearbeitet, aber ich habe es nicht geschafft, dass es funktioniert. Was ich wirklich brauche, ist so etwas wie:

^/[internalservername]/awesomewebapp proxy internally to http://[internalservername]:8080/awesomewebapp 

Danke im Voraus

1

2 Antworten auf die Frage

0
Brian Minton

Sie können RewriteRule verwenden, um eine Anforderung zu vertreten. Die Apache-Dokumentation für die Verwendung von mod_rewrite als Proxy zeigt Folgendes:

Beschreibung:

mod_rewrite enthält das [P] -Flag, mit dem URLs über mod_proxy an einen anderen Server übergeben werden können. Hier sind zwei Beispiele aufgeführt. In einem Beispiel wird eine URL direkt an einen anderen Server übergeben und als lokale URL angezeigt. Im anderen Beispiel werden fehlende Inhalte an einen Back-End-Server weitergeleitet.

Lösung:

Um eine URL einfach einem anderen Server zuzuordnen, verwenden wir das [P] -Flag wie folgt:

RewriteEngine auf RewriteBase "/ products /" RewriteRule "^ widget /(.*)$" " http://product.example.com/widget/ $ 1" [P] ProxyPassReverse "/ products / widget /" " http: // product.example.com/widget/ "

Im zweiten Beispiel geben wir die Anfrage nur dann weiter, wenn wir die Ressource nicht lokal finden können. Dies kann sehr nützlich sein, wenn Sie von einem Server zu einem anderen migrieren und nicht sicher sind, ob der gesamte Inhalt bereits migriert wurde.

RewriteCond "% "! -F RewriteCond "% "! -D RewriteRule "^ / (. *)" " Http://old.example.com/ $ 1" [P] ProxyPassReverse "/" " http://old.example.com/ "

Das zweite Beispiel, URLs bedingt umschreiben, mit dem [P] -Flag, um die Anfrage als Proxy zu verwenden, scheint das zu sein, was Sie brauchen.

Arbeitete damit, aber es sieht so aus, als würde ProxyPassReverse den Host von der URL entfernen. Nun wird die vollständige URL "http: // [publicdomain] / [internalhostname] / awesomewebapp" korrekt zu "http: // [internalhostname] / awesomewebapp" umgeleitet, anschließend wird sie als "http: // [publicdomain] / awesomewebapp" zurückgegeben "ohne den internen Hostnamen im Pfad. JCS81 vor 7 Jahren 0
0
JCS81

Meine bisherige "Lösung" funktionierte immer noch nicht richtig. Ich habe sie gelöscht, um Verwirrung zu vermeiden. Es scheint nicht möglich zu sein, wie ich es will, aber eine kleine Problemumgehung, bei der eine Subdomain anstelle eines Unterverzeichnisses verwendet wird, lässt es dennoch rocken.

RewriteCond % ([^.]+) RewriteRule ^/(.*) http://%1:8080/$1 [P] 

Quelle: http://www.vanbommelonline.nl/2011/10/seingabe-apache-for-dynamic-reverse-proxy.html