У меня странная настройка. Это выглядит так:
Browser ----------> HTTPs Proxy ------> Apache HTTP -----> Tomcat AJP
HTTPS HTTP AJP
На HTTPS-прокси (очень тупой прокси) URL-адрес выглядит как https: //proxy.domain.com/app. Затем он транслируется на Apache с использованием HTTP, как и http: //apache.domain.com/app (передавая хост proxy.domain.com). Затем Apache туннелирует запрос локально, используя протокол AJP, к ajp: // localhost: 8009 / app /.
Иногда сервер приложений хочет перенаправить запрошенный путь. Например, перенаправить / app / to / app / webapp. Таким образом, он отправляет 302 обратно в apache, перенаправляя путь - вероятно, что-то вроде ajp: // localhost: 8009 / app / webapp. Затем Apache переписывает URL-адрес перенаправления на http: //proxy.domain.com/app/webapp. Прокси HTTPS тупой, поэтому он не анализирует перенаправление и не меняет http на https.
Итак, я хотел бы выяснить, могу ли я настроить Apache для перезаписи URL-адреса перенаправления 302 для отправки пользователя на https.
Вот конфиг, который у меня есть в https.conf Apache:
ProxyPreserveHost on
RewriteEngine on
RewriteRule ^/app$ /app/ [PT]
ProxyPass /app ajp://localhost:8009/app
Я попытался использовать ProxyPassReverse , но не смог выяснить, как заставить его перезаписать URL перенаправления 302 с https вместо http.
Какие-нибудь мысли?
источник
Я нашел другой вариант.
На основании /programming/5741210/handling-x-forwarded-proto-in-java-apache-tomcat и Apache ReverseProxyPass перенаправляет на http, а не на https, кажется, что некоторые серверы распознают заголовок X-Forwarded-Protocol , Можно заставить Tomcat распознать это, добавив:
к
server.xml
.источник
X-Forwarded-Proto
.