Apache ProxyPass durch dynamischen Hostnamen

Apache ProxyPass durch dynamischen Hostnamen

Ich versuche, Apache so zu konfigurieren, dass es einen internen Server auf Basis dynamischer Hostnamen und unter Verwendung anderer Ports als Proxy nutzt. Das scheint mir ein bisschen zu kompliziert zu sein. Das hier ist mein Ergebnis:

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

Aber das ist (offensichtlich) nicht dynamisch. Ich habe an Umschreiberegeln usw. gearbeitet, aber es ist mir nicht gelungen, es zum Laufen zu bringen. Was ich wirklich brauche, ist so etwas wie:

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

Dank im Voraus

Antwort1

Sie können RewriteRule verwenden, um eine Anfrage zu übermitteln.Apache-Dokumentation zur Verwendung von mod_rewrite als Proxyzeigt folgendes:

Beschreibung:

mod_rewrite stellt das Flag [P] bereit, das die Weitergabe von URLs über mod_proxy an einen anderen Server ermöglicht. Hier werden zwei Beispiele gegeben. In einem Beispiel wird eine URL direkt an einen anderen Server weitergegeben und so bereitgestellt, als wäre sie eine lokale URL. Im anderen Beispiel leiten wir fehlende Inhalte per Proxy an einen Back-End-Server weiter.

Lösung:

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

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

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

RewriteCond "%{REQUEST_FILENAME}" !-f RewriteCond "%{REQUEST_FILENAME}" !-d RewriteRule "^/(.*)" "http://altes.beispiel.com/$1" [P] ProxyPassReverse "/" "http://altes.beispiel.com/"

Das zweite Beispiel, das bedingte Umschreiben von URLs mit dem Flag [P] zum Weiterleiten der Anforderung als Proxy, scheint genau das zu sein, was Sie benötigen.

Antwort2

Meine vorherige „Lösung“ funktionierte immer noch nicht richtig, also habe ich sie gelöscht, um Verwirrung zu vermeiden. Es scheint nicht so möglich zu sein, wie ich es möchte, aber ein kleiner Workaround mit einer Subdomain anstelle eines Unterverzeichnisses funktioniert immer noch.

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

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

verwandte Informationen