2017-03-04 8 views
1

Ich bin völlig aus Ideen mit diesem und glaube, ich brauche die Hilfe von jemandem mit einem guten Verständnis von Apache (2.4) und Tomcat (8.5)Apache Reverse-Proxy mit AJP mit Tomcat 302 umleitet

zu gewinnen

Ich habe eine Spring MVC 4 Web-App, die perfekt funktioniert, wenn ich den Proxy umgehe, um darauf zuzugreifen, aber es scheitert immer, wenn ich über den Proxy gehe und einen Link besuche, der zu einem 302 Redirect führt.

Direkt gehen Ich werde auf den richtigen Pfad umgeleitet, damit ich weiß, dass es nicht die Web-App ist, die dem Client die falsche URL zurückgibt. Aber über den Proxy werde ich an einen Ort weitergeleitet, der scheinbar der URL den Kontextpfad voranstellt - der bereits vorhanden ist! So erscheint es zweimal und daher gibt es eine Anfrage für eine URL, die nicht existiert!

Wenn ich mir die Tomcat s Zugriffsprotokolle anschaue, kann ich den Pfad der 302-Weiterleitung mit dem Kontextpfad voranstellen - ein doppelter Kontextpfad!

80.229.100.100 - - [04/Mar/2017:08:07:54 +0000] "GET /ctxPath/redirect HTTP/1.1" 302 - 
80.229.100.100 - - [04/Mar/2017:08:07:54 +0000] "GET /ctxPath/ctxPath/testUrl HTTP/1.1" 404 986 

Dies muss Tomcat Antwort auf HTTPD sein - die den AJP-Anschluss verwendet. Beim direkten Zugriff auf die Seite geht es über den HTTP-Connector und funktioniert einwandfrei. Ich habe meine HTTPD-Konfiguration aktualisiert, um den HTTP-Connector zu verwenden und das gleiche Ergebnis für 302 Weiterleitungen zu erhalten.

Wie Sie sehen können, führt jede Weiterleitung zu einem 404. Muss ich die Tomcat-Konfiguration in irgendeiner Weise ändern?

Derzeit meine HTTPD Config sieht wie folgt aus (der Port 9009 korrekt ist, wie ich mehrere Tomcat-Installationen haben):

ProxyPass/ajp://localhost:9009/ctxPath/ 
ProxyPassReverse/ajp://localhost:9009/ctxPath/ 
ProxyPassReverseCookiePath /ctxPath/

Was bin ich?

Antwort

0

Ich weiß, das ist jetzt sehr alt, aber ich habe es vor einiger Zeit gelöst, also dachte, es wäre lohnend, meine Lösung zu veröffentlichen - nicht sicher, ob es die 'richtige' Art ist, aber es scheint die Arbeit für die getan letztes Jahr!

# HTTP 302 redirects are not modified by the reverse proxy when using the AJP protocol. 
# https://tomcat.apache.org/connectors-doc/common_howto/proxy.html 
# Or perhaps Tomcat needs further configuration to support a proxy (See Connector config) 
# When sending a redirect, the redirect URL is placed in the 'Location' HTTP response header. 
# When the browser requests the page using the path in the Location header, 
# the proxy will dutifully proxy the request to the backend - which prefixes the context path. 
# This will cause the context path to appear twice and result in a 404. 
# ProxyPassReverse would usually modify the Location HTTP header, but using AJP it 
# appears no to, so take care of this ourselves by removing the context path from the 
# URL in the Location header before passing it back to the client. 
# Spring Security uses redirects during authentication 
Header edit Location /ctxPath/(.*)$ /$1 
Verwandte Themen