Ich habe ein seltsames Setup. Es sieht aus wie das:
Browser ----------> HTTPs Proxy ------> Apache HTTP -----> Tomcat AJP
HTTPS HTTP AJP
Auf dem HTTPS-Proxy (einem sehr dummen Proxy) wird eine URL angezeigt, die wie folgt aussieht: https: //proxy.domain.com/app. Es wird dann über HTTP wie http: //apache.domain.com/app (Übergabe des Hosts proxy.domain.com) an Apache getunnelt. Apache tunnelt die Anforderung dann lokal mithilfe des AJP-Protokolls an ajp: // localhost: 8009 / app /.
Manchmal möchte der App-Server den angeforderten Pfad umleiten. Leiten Sie beispielsweise / app / to / app / webapp um. Es sendet also einen 302 zurück an den Apache, der den Pfad umleitet - wahrscheinlich so etwas wie ajp: // localhost: 8009 / app / webapp. Apache schreibt dann die Weiterleitungs-URL zu http: //proxy.domain.com/app/webapp neu. Der HTTPS-Proxy ist dumm, analysiert also nicht die Umleitung und ändert das http in https.
Daher möchte ich herausfinden, ob ich Apache so konfigurieren kann, dass die 302-Umleitungs-URL neu geschrieben wird, um den Benutzer an https zu senden.
Hier ist die Konfiguration, die ich bisher in Apaches https.conf habe:
ProxyPreserveHost on
RewriteEngine on
RewriteRule ^/app$ /app/ [PT]
ProxyPass /app ajp://localhost:8009/app
Ich habe versucht, ProxyPassReverse zu verwenden , konnte jedoch nicht herausfinden, wie erzwungen werden kann , die 302-Umleitungs-URL mit https anstelle von http neu zu schreiben.
Irgendwelche Gedanken?
quelle
Ich habe eine andere Option gefunden.
Basierend auf /programming/5741210/handling-x-forwarded-proto-in-java-apache-tomcat und Apache ReverseProxyPass wird auf http anstatt auf https umgeleitet. Einige Server erkennen anscheinend den X-Forwarded-Protocol-Header . Man kann Tomcat erkennen lassen, indem man Folgendes hinzufügt:
zu
server.xml
.quelle
X-Forwarded-Proto
.