Reverse Proxy Probleme mit 'ProxyPreserveHost On'

Alles, was den Apache betrifft, kann hier besprochen werden.

Reverse Proxy Probleme mit 'ProxyPreserveHost On'

Postby tonabnehmer » 28. April 2009 00:00

Hallo,

ich möchte einen Apache 2.2 als Reverse Proxy betrieben für den Zugriff aus dem Internet auf Webseiten und Applikationen auf verschiedenen Servern in der DMZ. Für Outlook Web Access und eine andere Applikation brauche ich die Option 'ProxyPreserveHost On', da diese sonst nicht funktionieren. Jedoch habe ich mit 'ProxyPreserveHost On' Probleme mit anderen Applikationen und HTTPS.

Ein Beispiel:
Wenn man https://domain.de/typo3 aufruft, wird man von Typo3 PHP nach https://domain.de/typo3/backend.php zum Login weitergeleitet. In meinem Fall werde ich allerdings nicht nach https... weitergeleitet, sondern nach http. Offensichtlich wird im HTTP Header aus dem 'https' ein 'http'.

Hat jemand eine Idee?

Danke und Grüße,
tonabnehmer
tonabnehmer
 
Posts: 10
Joined: 27. April 2009 23:11

Re: Reverse Proxy Probleme mit 'ProxyPreserveHost On'

Postby Wiedmann » 28. April 2009 00:06

Wenn man https://domain.de/typo3 aufruft, wird man von Typo3 PHP nach https://domain.de/typo3/backend.php zum Login weitergeleitet. In meinem Fall werde ich allerdings nicht nach https... weitergeleitet, sondern nach http. Offensichtlich wird im HTTP Header aus dem 'https' ein 'http'.

Also wenn du ein Problem mit dem Schema (Protokoll) hast, dürftest du mit ProxyPreserveHost nichts ausrichten können.

Ich würde mal deine sonstige RewriteProxy Konfiguration überprüfen.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: Reverse Proxy Probleme mit 'ProxyPreserveHost On'

Postby tonabnehmer » 28. April 2009 00:33

Gerade 'ProxyPreserveHost' beeinflusst aber bei mir ob die Anwendung funktioniert oder nicht. Hier der relavente Teil der Konfiguration:

Code: Select all
ProxyRequests Off
ProxyPreserveHost On
SSLProxyEngine On

ProxyPass /foo http://10.1.0.112:8080/foo
ProxyPassReverse /foo http://10.1.0.112:8080/foo
tonabnehmer
 
Posts: 10
Joined: 27. April 2009 23:11

Re: Reverse Proxy Probleme mit 'ProxyPreserveHost On'

Postby Wiedmann » 28. April 2009 07:06

Womit du ja schon die Antwort siehst:
Über welches Schema (Protokoll) sprichst du dein Backend denn an? Welches wird dieses also nehmen, um selbst Links, bzw. Weiterleitungen, zu erzeugen?
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: Reverse Proxy Probleme mit 'ProxyPreserveHost On'

Postby tonabnehmer » 28. April 2009 09:48

Ok, dass verstehe ich und war auch meine Vermutung. Die SSL Verbindung soll aber am Proxy enden, der Proxy sich unverschlüsselt mit dem Backend Servern verbinden. Die Frage also lautet, wie kann ich im Header das Protokoll umschreiben bzw. beibehalten, wenn die ursprüngliche Verbindung zwischen Client und Proxy per HTTPS erfolgte.

Danke und Grüße,
tonabnehmer
tonabnehmer
 
Posts: 10
Joined: 27. April 2009 23:11

Re: Reverse Proxy Probleme mit 'ProxyPreserveHost On'

Postby Wiedmann » 28. April 2009 09:56

Die Frage also lautet, wie kann ich im Header das Protokoll umschreiben bzw. beibehalten,

Das würde/sollte der Apache automatisch machen (ist ja eben das, was ProxyPassReverse macht/anschaltet). Der "Wechsel" dürfte also nicht in einem Header passieren, sondern im HTML.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: Reverse Proxy Probleme mit 'ProxyPreserveHost On'

Postby tonabnehmer » 28. April 2009 12:02

Ok, was mich aber wundert: Warum funktioniert es einwandfrei wenn ich 'ProxyPreserveHost Off' setze?
tonabnehmer
 
Posts: 10
Joined: 27. April 2009 23:11

Re: Reverse Proxy Probleme mit 'ProxyPreserveHost On'

Postby Wiedmann » 28. April 2009 13:06

Warum funktioniert es einwandfrei wenn ich 'ProxyPreserveHost Off' setze?

Stimmt, die gab es ja bei dir auch noch. Ist wohl auch mit der Grund, warum im Manual steht, dass man die nicht ändern sollte.

Hast denn jetzt mal geschaut wo/wie der Redirekt gemacht wird?

Theoretisch (normal) es es ja so:
Client --> Server --> https://ext.example.de/foo/ Host:ext.example.de
Server --> Backend --> http://int.example.de/foo/ Host: int.example.de
Backend --> Server --> Redirekt --> http://int.example.de/bar/ Host: int.example.de
Server --> Client --> Redirekt --> https://ext.example.de/bar/ Host: ext.example.de

Der Server weis, dass er das Backend mit int.example.de angesprochen hat, und bekommt vom Backend Header damit (int.example.de) zurück. Header die hier übereinstimmen ersetzt er durch den Hostnamen den der Client verwendet hat ( ext.example.de). Und behandelt das allgemein wie ein interner Redirekt, ändert also nur den Hostnamen (und Pfade falls nötig), ohne Ändern des Protokolles,


Bei dir ist es gerade so:
Client --> Server --> https://ext.example.de/foo/ Host:ext.example.de
Server --> Backend --> http://int.example.de/foo/ Host: ext.example.de
Backend --> Server --> Redirekt --> http://ext.example.de/bar/ Host: ext.example.de
Server --> Client --> Redirekt --> http://ext.example.de/bar/ Host: ext.example.de

Der Server spricht das Backend selbst mit int.example.de an, bekommt vom Backend aber Header mit ext.example.de zurück. Da diese nicht übereinstimmen, behandelt der Apache dies wie ein externer Redirekt und ändert gar nichts daran und reicht das as-is an den Client zurück. Da der komplette Redirekt Header aber auch das Protokoll enthält, wird das hier gewechselt (aus Sicht des Clients).

Bei "ProxyPreserveHost On" ist eben das Backend für die korrekte Validierung und Generierung der Respond-Header verantwortlich. (Steht ja auch so ähnlich im Manual.)
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: Reverse Proxy Probleme mit 'ProxyPreserveHost On'

Postby tonabnehmer » 28. April 2009 14:17

Das ist aber sehr anschaulich, Danke ;-)

ProxyPreserveHost On brauche ich unbedingt für Outlook Web Access. Ohne geht es nicht, dass habe ich auch in zahlreichen Konfigurationsbeispielen nachlesen können.

Nun habe ich mir ein paar Gedanken gemacht und Lösungen gefunden, die augenscheinlich funktionieren.

1) Tomcat hinter dem Apache Proxy
Hier wird statt HTTP nunmehr AJP als Protokoll eingesetzt. Dazu muss das entsprechende Modul geladen sein. Die Konfiguration sieht dann so aus:

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

<Location /foo>
ProxyPass ajp://int.example.de:8009/foo
ProxyPassReverse ajp://int.example.de:8009/foo
</Location>

2) ReverseProxy Regel
Du hattest geschrieben, dass der Apache Proxy den Request an int.example.com schickt, aber einen Header mit ext.example.com zurückbekommt. Daher ignoriert der Apache Proxy die ReverseProxy Regel und wir haben im Client plötzlich http statt https zu stehen. Also sagen wir dem Apache Proxy ganz einfach er solle auch den Header mit ext.example.com umschreiben. Das sieht dann so aus:


<Location /foo>
ProxyPass http://int.example.com:8080/foo
ProxyPassReverse http://ext.example.com/foo
</Location>


Spricht irgendetwas gegen diese Lösungen?

Danke und Grüße,
tonabnehmer
tonabnehmer
 
Posts: 10
Joined: 27. April 2009 23:11

Re: Reverse Proxy Probleme mit 'ProxyPreserveHost On'

Postby Wiedmann » 28. April 2009 14:54

ProxyPreserveHost On brauche ich unbedingt für Outlook Web Access. Ohne geht es nicht, dass habe ich auch in zahlreichen Konfigurationsbeispielen nachlesen können.

Also für einen reverse Proxy allgmein (und owa im speziellen) hab ich immer noch mod_proxy_html konfiguriert.

Und bei OWA https frontend --> http backend sollte man dann noch den header front-end-https=on setzten.


Aber wenn's bei dir tut, ist's auch i.O. Beim Tomcat machts ja eh Sinn, das gleich so zu machen.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany


Return to Apache

Who is online

Users browsing this forum: No registered users and 3 guests