Я устраняю неполадки в приложении 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 как-то задействован?