У нас есть приложение Spring Boot (Spring MVC) со встроенным Tomcat на выделенном сервере приложений за прокси-сервером Apache SSL.
Порт SSL на прокси-сервере - 4433, переадресация на порт 8080 на сервере приложений.
Таким образом, URL-адрес прокси-сервера пересылается так:
https://proxyserver:4433/appname >>forward>> http://appserver:8080/
При запуске БЕЗ прокси, первое, что происходит, это то, что
Spring Security перенаправляет запрос, например:
http://appserver:8080/ >>redirect>> http://appserver:8080/login
отобразить форму входа, расширив WebSecurityConfigurerAdapter
...
httpSecurity.formLogin().loginPage("/login") ...
...
Без прокси работает нормально, но С прокси редирект нужно менять,
поэтому Spring вместо этого должен перенаправить на соответствующий прокси-URL, например:
http://appserver:8080/ >>redirect>> https://proxyserver:4433/appname/login
но успеха пока нет.
Я пытаюсь применить это решение: 59.8. Использовать Tomcat за внешним прокси-сервером.
Мы настроили mod_proxy в Apache и убедились, что он отправляет ожидаемые заголовки:
X-Forwarded-For: xxx.xxx.xxx.xxx
X-Forwarded-Host: proxyserver
X-Forwarded-Port: 4433
X-Forwarded-Proto: https
Приложение запускается с параметрами:
export ARG1='-Dserver.tomcat.protocol-header=x-forwarded-proto'
export ARG2='-Dserver.tomcat.remote-ip-header=x-forwarded-for'
java $ARG1 $ARG2 -jar webapp.jar
Тем не менее редирект не работает.
Он будет продолжать перенаправлять локально на http://appserver:8080/login
который недоступен для клиентов.
Что еще нужно сделать, чтобы этот сценарий работал?
ОБНОВИТЬ
Также меня беспокоит часть "/appname" в URL прокси. На сервере приложений приложение имеет корень "/". Как Spring должен быть проинструктирован о том, что "/appname" должно быть включено во все URL-адреса, отправляемые обратно клиентам, при переходе через прокси-сервер?