Behalten Sie die ursprüngliche Anfrage-URL bei mod_proxy redirect bei
Mir läuft eine Webapplikation, die auf einem Servlet-Container (port 8080) in einer Umgebung, die zugegriffen werden kann, aus dem internet (extern) und von der Gesellschaft im inneren (intenal), z.B.
http://external.foo.bar/MyApplication
http://internal.foo.bar/MyApplication
Den incomming (externen/internen) Anfragen werden umgeleitet, um den servlet-container mit Hilfe eines apache-http-server mit mod_proxy. Die Konfiguration sieht so aus:
ProxyPass /MyApplication http://localhost:8080/MyApplication retry=1 acquire=3000 timeout=600 Keepalive=On
ProxyPassReverse /MyApplication http://localhost:8080/MyApplication
Bin ich jetzt vor dem problem, dass einige MyApplication Antworten hängen von der ursprünglichen Anfrage-URL ein. Beton: ein WSDL-Dokument wird bereitgestellt mit einem element, das eine schemaLocation="<RequestUrl>?xsd=MyApplication.xsd"
element.
Mit meiner aktuellen Konfiguration, es sieht immer aus wie
<xs:import namespace="..." schemaLocation="http://localhost:8080/MyApplication?xsd=MyApplication.xsd"/>
aber es sollte
External Request: <xs:import namespace="..." schemaLocation="http://external.foo.bar/MyApplication?xsd=MyApplication.xsd"/>
Internal Request: <xs:import namespace="..." schemaLocation="http://internal.foo.bar/MyApplication?xsd=MyApplication.xsd"/>
Ich nehme an, dies ist eine häufige Anforderung. Aber da bin ich kein Experte in der Konfiguration des apache-http-server und seine Module würde ich mich freuen, wenn jemand könnte einige geben, die (detaillierte) Hilfe.
Vielen Dank im Voraus!
InformationsquelleAutor der Frage FrVaBe | 2011-05-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mit Apache >= 2.0.31 dann könnten Sie versuchen, die
ProxyPreserveHost
Richtlinie beschriebenen hier.Sollte dies passieren die ursprüngliche Host-header Trog mod_proxy in Ihrer Anwendung, und normalerweise wird die Anfrage-URL neu erstellen dort (in Ihrem Servlet-container) mit den Host-header, so dass die schema-Standort soll gebaut werden mit den host und den Pfad infos von "vor" dem proxy.
(Gepostet hier auch der Vollständigkeit halber)
InformationsquelleAutor der Antwort jCoder
Hier ist eine weitere alternative, wenn Sie möchten, bewahren Sie sowohl die original-host-Namen und die Proxy-host-Namen.
Wenn Sie mit mod_proxy deaktivieren
ProxyPreserveHost
in der Apache-Konfiguration. Für die meisten proxy-Servern, einschließlich mod_proxy, Lesen Sie dieX-Forwarded-Host
- header in der Anwendung. Dies kennzeichnet die ursprüngliche Host-header zur Verfügung gestellt von der HTTP-Anforderung.Erfahren Sie mehr über die Header mod_proxy (und mögliche andere standard-proxy-Server) eingestellt hier:
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
InformationsquelleAutor der Antwort ricosrealm
Sollten Sie in der Lage zu tun, ein mod_rewrite in apache zu codieren, die vollständige URL als query-parameter, oder vielleicht Teil des fragments. Wie einfach dies sein könnten, hängt davon ab, ob Sie vielleicht eine oder die andere als Teil der eingehenden Anfragen.
Beispielsweise
http://external.foo.bar/MyApplication
bekommen könnte umgeschriebenhttp://external.foo.bar/MyApplication#rewritemagic=http://external.foo.bar/MyApplication
die dann übergeben bekommt in der ProxyPass und dann abgestreift.Ein bisschen ein hack, ja, und vielleicht ein wenig schwierig zu bekommen umschreiben und proxy-arbeiten in der richtigen Reihenfolge und nicht gegenseitig stören, aber es scheint, wie es funktionieren sollte.
InformationsquelleAutor der Antwort Seth Robertson