Also die Sache ist jetzt die. Ich versuche nocheinmal die Ausgangssituation zu erläutern: Der Rechner von dem ich Rede ist aus dem Internet unter der Adresse docs.xyz.net zu erreichen. Auf diesem Rechner befindet sich ein unbekannter WebServer ohne Konfigurationsmöglichkeiten der auf den Port 9000 hört (der später von außen nicht erreichbar sein wird, es ist nur Port 80 offen). Dieser Web-Server fühlt sich
lokal unter den Namen docs.xyz.net und xyz.net angesprochen, sonst nichts (und damit der Rechner lokal die Adressen nicht über den DNS-Server auflöst wurde die /etc/hosts um die beiden Adressen und jeweils die 127.0.0.1 angepasst).
Greife ich nun auf diesen Rechner über seinen offiziellen Namen im Internet, also docs.xyz.net zu (d.h. über Port 9000, im produktiven Einsatz wird dieser Port geschlossen sein, das Beispiel dient nur zur Erläuterung), erreiche ich auch die Seite die unter der SubDomain docs.xyz.net erreichbar ist. Manipuliere ich den HTTP-Request auf dieser Adresse so, dass im Host xyz.net statt docs.xyz.net steht, komme ich auf die Seite die unter diesem WebServer unter xyz.net zu finden ist.
Auf dem selben Rechner wurde nun ein Apache2 Web-Server installiert mit einem VirtualHost unter Port 80. Dieser soll alle Requests über einen ReverseProxy an die Adresse docs.xyz.net:9000 weiterleiten. Das heißt, Die WebSeite, die man auf dem Rechner lokal unter xyz.net findet, soll von aussen "offiziell" (also jetzt mal von der Manipulation des Host-headers abgesehen) nicht erreichbar sein. Das problem ist jetzt, dass bei dem ersten Zugriff irgendeines Clients aus dem Internet auf die Adresse docs.xyz.net:80 der hintere WebServer auf Port 9000 einen 302-Redirect als Antwort schickt, den den Client auf die Seite xyz.net/?setCookie=1 weiterleitet. Das was aus dem Internet aber unter xyz.net zu finden ist, hat mit meinem Rechner und seinen WebServer absolut nicht zu tuen.
Jetzt habe ich mir den Link durchgelesen und kriege es immer noch nicht raus.
- Code: Select all
ProxyRequests off
ProxyPreserveHost On
ProxyPass / http://docs.xyz.net:9000/
ProxyPass /red/ http://xyz.net:9000/
ProxyPassReverse / http://docs.xyz.net:9000
ProxyPassReverse /red/ http://xyz.net:9000
Unter den Direktiven stelle ich mir nun, stand meines bescheidenen Wissens, folgendes vor:
Kommt ein Request von außen (also auf docs.xyz.net:80/) wird er über den Proxy weitergeleitet (jetzt nicht im Sinne von 3xx) an
http://docs.xyz.net:9000/. Das sollte diese Zeile sein:
- Code: Select all
ProxyPass / http://docs.xyz.net:9000/
Antwortet der WebServer der unter Port 9000 liegt mit dem Host: docs.xyz.net, wird die URI so übernommen und an die Root URI rangehängt.
- Code: Select all
ProxyPassReverse / http://docs.xyz.net:9000
Antwortet dieser WebServer jedoch mit dem Hostnamen xyz.net, wird vor die URI der Pfad "red/" angehängt (und ich schätze hier liegt schon ein Denkfehler):
- Code: Select all
ProxyPassReverse /red/ http://xyz.net:9000
Sollte der Client eine Anfrage stellen die z.B.
http://docs.xyz.net/red/index.html lautet, wandelt der Apache-Proxy diesen Request in die Form
http://xyz.net/index.html um, so denke ich.
- Code: Select all
ProxyPass /red/ http://xyz.net:9000/
Irgendwo jedoch scheine ich etwas vollkommen falsch zu verstehen, denn greife ich auf docs.xyz.net über das Internet zu, erhalte ich einen 302-Redirect auf die URL xyz.net/?blabla, was auf einen vollkommen unbeteiligten WebServer verweist. Was genau sehe ich hier falsch?