Приложение Spring Boot с включенным RemoteIpValve для встроенного Tomcat сбрасывает порт при перенаправлении на страницу входа - PullRequest
0 голосов
/ 25 сентября 2019

Я устраняю неполадки в приложении Spring Boot со встроенным Tomcat, расположенным за обратным прокси-сервером Apache, где SSL прекращает работу.В целях тестирования (для воспроизведения настройки клиента) внешний (Apache) URL-адрес содержит нестандартный порт 7552.

Apache прослушивает порт 7552 и, например, обратный прокси-сервер для прослушивания приложенияна порту 7452:

ProxyPass /My_App http://www.server.com:7452/My_App  
ProxyPassReverse /My_App http://www.server.com:7452/My_App

Приложение использует следующие переменные Spring Boot для разгрузки SSL:

export SERVER_USE_FORWARD_HEADERS="true"
export SERVER_TOMCAT_PROTOCOL_HEADER="x-forwarded-proto"
export SERVER_TOMCAT_REMOTE_IP_HEADER="x-forwarded-for"
export SERVER_TOMCAT_REMOTE_IP_PROXIES_HEADER="x-forwarded-by"
export SERVER_TOMCAT_INTERNAL_PROXIES="\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"

Проблема заключается в том, что при переходе к приложению на https://www.server.com:7552/My_App, перенаправление на страницу входа сбрасывает порт (или перенаправляет на 443), отправляя меня на https://www.server.com/My_App/login.html.

Я могу решить эту проблему, отправив заголовок x-forwarded-port со значением7552 от Apache, но я не уверен, зачем это нужно.Разве все, что делает перенаправление, не должно сохранять порт?Я подтвердил, что заголовок Host отправляется из Apache с первоначальным запросом и включает порт.

Еще одно наблюдение - если я не включу переменные SERVER_TOMCAT_PROTOCOL_HEADER или SERVER_TOMCAT_REMOTE_IP_HEADER (я думаю, это то, что переключает RemoteIpValve во встроенном Tomcat,), тогда эта конкретная проблема исчезнет.

Может кто-нибудь помочьмне понять, что порт не сохраняется во время этого перенаправления?Spring PortMapper как-то задействован?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...