Apache als Reverse-Proxy

Serverteddy

New Member
Hallo Serverkollegen,
ich habe mal wieder ein paar Fragen zu Apache.

Im Moment versuche ich eine Apache als Reverse-Proxy einzurichten, also sämtlich Anfragen zu einem zweiten Apache weiterzuleiten, aber die Anfragen trotzdem über den Revers-Proxy wegen Loadbalancing und ect zu bearbeiten.
Meine ersten tests mit ProxyPass und ProxyPassReverse waren auch sehr erfolgreich, so dass ich Anfragen auf einzelne Webseiten weiterleiten konnte.

z.B.
ProxyPass /test/ http://internerserver1:8080/
ProxyPassReverse /test/ http://internerserver1:8080/

Meine Fragen ist jetzt, wenn ich über den Proxy auf example/index.html weiterleite und dann dort auf dem interne Server eine Weiterleitung erfolgt dann sucht er die entsprechen Daten auf dem Proxy statt auf dem internen Server.
1. Kann ich also im Proxy irgendwie definieren das er auch andere Dateien und Unterordner auf dem internen Server statt auf dem Proxy bearbeiten soll?
2. Ich habe gelesen ProxyHTML ersetzt absolute Links so dass sie über den Proxy laufen und auch von extern angesprochen werden können, funktioniert das nur mit HTML-Dateien oder auch php,asp ect?

grüße
Serverteddy :cool:
 
1. Kann ich also im Proxy irgendwie definieren das er auch andere Dateien und Unterordner auf dem internen Server statt auf dem Proxy bearbeiten soll?
Mit Nummer 2 könntest du das Regeln, ansonsten sieht es schlecht aus, da der Benutzer immer nur auf den transparente Proxy zugreifft. Die einzige Lösung sehe ich, wenn du jedoch den Link Server-Abhängig machst (also www1.example.com/weiterleitung.html).

2. Ich habe gelesen ProxyHTML ersetzt absolute Links so dass sie über den Proxy laufen und auch von extern angesprochen werden können, funktioniert das nur mit HTML-Dateien oder auch php,asp ect?

mod_proxy_html ersetzt auch Links in php, asp usw. Es bearbeitet nur die rohe HTML Ausgabe an den Browser.
Nachteil: Load-Balancing funktioniet so nicht perfekt. Wenn der User nur noch auf www1 surft und dieser abschmiert, wird er nicht auf www2 geleitet.
 
pound kann das auch, lighttpd ebenfalls.

Apache ist meines Erachtens zu schwergewichtig dafür.
 
1. Kann ich also im Proxy irgendwie definieren das er auch andere Dateien und Unterordner auf dem internen Server statt auf dem Proxy bearbeiten soll?
Einfach ProxyPass bzw. ProxyPassMatch und ProxyPassReverse entsprechend setzen, so dass alles abgedeckt ist.

Apache ist meines Erachtens zu schwergewichtig dafür.
Dieser Satz ergibt Mmn. nicht soviel Sinn. Gerade wenn er schwergewichtig wäre müsste er das gewünschte Feature unterstützen.
 
Schwergewichtig im Sinne von Speicherverbrauch.

nginx ist schlanker und fühlt sich in der Handhabung auch so an. Das meinte ich damit. Ich rede nicht von Funktionsumfang.

Ich muss dazu sagen, dass ich ohnehin kein grosser Apache-Fan bin.
 
Erstmal danke für die vielen guten Antworten. Wenn ich das richtig sehe habe ich folgende Möglichkeiten.

1.ProxyPass und ProxyPassMatch für alle Links einbinden
2.ProxyPass mit mod-rewrite nutzen
3.Anderen Http-server nutzen( ich habe mal bei nginx geschaut, kann es sein dass das zauberwort "proxy-redirect" heißt?) Pound und lighthttpd schaue ich mir noch an.

Eine Weitere Idee ist mir noch gekommen. Ist es zufällig Möglich eine Apache httpd auf einen AJP-Port listen zu lassen? Dann wäre das ganze mit Loadbalancing und Weiterleitung wesentlich einfacher. :D
 
Wenn ich das richtig sehe habe ich folgende Möglichkeiten.
Erkläre doch nochmal präzise, was du vorhast und was nicht klappt. Etwas detaillierter als im ersten Post wäre wünschenswert. Dann kann man dir auch sinnvolle Vorschläge unterbreiten.

Ist es zufällig Möglich eine Apache httpd auf einen AJP-Port listen zu lassen?
Ja, aber deshalb spricht der Apache httpd dann noch lange kein AJP.

Dann wäre das ganze mit Loadbalancing und Weiterleitung wesentlich einfacher. :D
Suchst du vielleicht einfach mod_proxy_balancer?
 
Okay dann versuche ich die Problematik an einem Beispiel nochmal etwas genauer zu erklären.

Es gibt die Webserver A,B und C auf denen jeweils unterschiedliche Anwendungen laufen. Bisher werden Anfragen direkt an die Webserver geschickt und dort bearbeitet. Idee ist es jetzt einen Webdispatcher dazwischen zu schalten, über denen die Anfragen abgearbeitet werden. Dadurch soll Ausfallsicherheit und Loadbalancing sowie zentrale einheitliche Zugriffs-Logs mit Realisiert werden, so dass es so aussieht:

________________________| ---> Webserver A
Client ---> Webdispatcher | ---> Webserver B
________________________| ---> Webserver C

also statt die Anfragen über
"http//intern.webserver.a/anwendung"

laufen zu lassen sollen dann die Anfragen auch so aussehen

"http://webdispatcher/anwendung"

Und jetzt das Problem. Ein einfaches Redirect reicht nicht, da sonst der Client den Webdispatcher nur einmal aufruft und dann umgeht. Ein ProxyPass funktioniert zwar, müsste aber für alle Möglichen Zugriffe konfiguriert werden mit z.B ProxyPassMatch sowie mit ProxyHTML, was sehr umständlich ist. Jetzt scheint es ja so zu sein das Apache dafür keine default-lösung hat, aber andere genannte Server. Frage ist jetzt für mich ob proxy-redirect wohl das ist, was ich suche ;)
 
Last edited by a moderator:
Ein einfaches Redirect reicht nicht, da sonst der Client den Webdispatcher nur einmal aufruft und dann umgeht.
Ja, das ist richtig. mod_proxy macht aber mit Sicherheit keinen "Redirect", sondern fungiert (Achtung, Überraschung!) als Proxy zum konfigurierten Backend. Das heißt, dass die Anfragen des Clients an den Proxy geschickt werden, dieser das Backend abfragt, das Backend dem Proxy antwortet und der Proxy dann dem Client die Antwort schickt.

Ein ProxyPass funktioniert zwar, müsste aber für alle Möglichen Zugriffe konfiguriert werden mit z.B ProxyPassMatch sowie mit ProxyHTML, was sehr umständlich ist.
Nein, eigentlich nicht. So ein Setup ist sicherlich tausendfach im Einsatz, allein schon um diverse Anwendungsserver nicht direkt ans Netz hängen zu müssen.

Ist es trotzdem möglich Apache-webserver über ajp miteinander sprechen zu lassen?
Nein. Es gibt mod_proxy_ajp und mod_jk(2), aber die machen nicht das, was du willst. Weißt du überhaupt was AJP ist und in welchen Szenarien man dieses Protokoll einsetzt?
 
Ja, das ist richtig. mod_proxy macht aber mit Sicherheit keinen "Redirect", sondern fungiert (Achtung, Überraschung!) als Proxy zum konfigurierten Backend. Das heißt, dass die Anfragen des Clients an den Proxy geschickt werden, dieser das Backend abfragt, das Backend dem Proxy antwortet und der Proxy dann dem Client die Antwort schickt.
Ich meinte auch nicht das ProxyPass ein Redirect macht ;) ProxyPass funktioniert ja in meiner Test-umgebung, jedoch sind die Weiterleitungen des Backend-servers schwierig, aber ich glaube ProxyPassMatch ist da wohl die Lösung

Nein, eigentlich nicht. So ein Setup ist sicherlich tausendfach im Einsatz, allein schon um diverse Anwendungsserver nicht direkt ans Netz hängen zu müssen.
Ja sicherlich ist es im Einsatz, weil es ja auch Sinn macht. Ich bin bloß von AJP so verwöhnt das ich gehofft habe das es eine Lösung mit relativ geringem Konfigurationsaufwand gibt :D


Nein. Es gibt mod_proxy_ajp und mod_jk(2), aber die machen nicht das, was du willst. Weißt du überhaupt was AJP ist und in welchen Szenarien man dieses Protokoll einsetzt?

Soweit ich weiß ist AJP ein Apache-eigenes Protokoll welches genutzt wird um Tomcat-Apllikationserver an der Apache-httpd zu binden und loadbalancing und mehr bereitzustellen(hab gelesen IIS kann auch AJP). Das läuft übrigens auch schon bei mir, und da ich das so einfach und gut fand, dachte ich das es für webserver ideal wäre
 
Lange rede kurzer Sinn -->

ich probiere gerade mit ProxyPass und es scheint alles gut zu laufen. auch das mit den Weiterleitung von HTML-Seiten klappt wohl:
ProxyPassMatch ^(/.*\.html)$ http://webdispatcher:8080/$1

Stellt sich für mich noch die Frage: Gibts eine Übersicht über Struktur und Aufbau der ProxyPassMatch-Funktion? Kann es sein das es die Gleiche Syntax ist wie mod_rewrite?

grüße und Danke für die hilfreichen Infos
 
Back
Top