Wie umschreiben Location-response-header in einem proxy-setup mit Apache?
Habe ich eine primary-proxy, der die Anfragen an einen sekundären proxy auf die OpeenSSO installiert ist.
Wenn die OpenSSO-agent ermittelt, dass der Benutzer nicht eingeloggt ist, wirft er eine 302-Weiterleitung auf die server-Authentifizierung und bietet die original (encoded) URL, die der Benutzer angefordert, die als GET-parameter in der Umleitung location-header.
Jedoch die URL in der GET-variable ist, die der inneren (sekundären) proxy-server, nicht die ursprünglichen proxy-server. Also, ich würde gerne Bearbeiten/umschreiben, die "Location" - header der Antwort zu geben, die richtige URL.
E. g.
- http://a.com/hello/ (Original angeforderten URL)
- http://a.com/hello2/ (Sekundäre proxy mit OpenSSO-agent)
- http://auth.a.com/login/?orig_request=http%3A%2F%2Fa.com%2Fhello2%2F (302-Umleitung zu auth-server mit den angeforderten URL, der zweite proxy-server-codiert GET-variable)
- http://auth.a.com/login/?orig_request=http%3A%2F%2Fa.com%2Fhello%2F (Codierte URL wird umgeschrieben, um die ursprüngliche Anforderung)
Habe ich versucht so ziemlich alle Kombinationen von Kopf-und schreibt ohne Glück, so dass ich dachte, es kann nicht möglich sein. Der nächste, den ich bekam war, aber das Sie mod_headers. edit-Funktion funktioniert nicht Parsen von Umgebungsvariablen.
# On the primary proxy.
RewriteEngine On
RewriteRule ^/(.*)$ - [E=orig_request:$1,P]
Header edit Location ^(http://auth\.a\.com/login/\?orig_request=).*$ "$1http%3A%2F%2Fa.com%2F%{orig_request}e"
Du musst angemeldet sein, um einen Kommentar abzugeben.
ProxyPassReverse
ProxyPassReverse sollte dies für Sie tun:
Ich bin mir nicht sicher, warum der reverse-proxy nicht so verhielten schon, vorausgesetzt, Sie sind mit einem paar von ProxyPass und ProxyPassReverse-Richtlinien zu definieren.
Bearbeiten der Location-Header
Wenn Sie wollen, um in der Lage zu Bearbeiten Sie das Location-header, so wie Sie es beschreiben, Sie können es tun,wie der Apache 2.4.7:
"Format specifiers" erwähnt in der Dokumentation unter anderem die Verwendung von Umgebungsvariablen, z.B.
%{VAR}e
.Vielleicht wollen Sie auch zu prüfen, ändern Sie Ihre Anwendung so, dass die orig_request URL-parameter wird relativiert, wodurch möglicherweise die Beseitigung der Notwendigkeit für die Header-änderungen mit Umgebungsvariablen.
Relativen Pfad Header -
Können Sie auch versuchen, einen relativen Pfad in der Location-header, die würde beseitigen die Notwendigkeit, explizit anzeigen einer Domäne in die andere. Dies ist offiziell gültig als der RFC 7231 (Juni 2014), aber war weit unterstützt sogar vor, dass. Sie relativieren Ihre Location-header mit Apache
Header edit
Richtlinien (noch vor version 2.4.7, da wäre es nicht erforderlich, das ersetzen von Umgebungsvariablen). Das würde in etwa so Aussehen:Header edit Location "(^http[s]?://)([^/]+)" ""
ProxyPassReverse
imLocation
block führte die Umleitung zurück auf die IP des load balancer in der proxy-Kette, anstatt den externen FQDN. MitHeader edit Location
funktionierte perfekt, und fühlt sich mehr intuitiv sowieso. Vielen Dank für deinen Beitrag.