У меня есть 2 сервера, на которых запущено по 2 экземпляра Tomcat (один экземпляр Tomcat для RC, один для производства). Эти серверы, назовем их server1 и server2, установлены за балансировщиком нагрузки F5 для поддержания безотказной работы и поддержки SSL. Когда кто-то переходит на server1: 8081, он получает экран приветствия для второго экземпляра tomcat на server1 (и server1: 8080 предоставит первый экземпляр). При подключении к серверу: 8443, URL-адрес с балансировкой нагрузки F5, который идет на server1: 8081 и server2: 8081, я также получу экран приветствия Tomcat для этого экземпляра, прослушивающего порт 8081. Однако при переходе на server: 8443 / app /, Я получаю сообщение об ошибке, и захваты пакетов wirehark показывают, что перенаправление идет на порт 8080 server1. Я не понимаю, откуда идет перенаправление на порт 8080, и у меня нет перенаправлений в моем server.xml для этой базовой конфигурации экземпляра tomcat. Кто-нибудь знает, возможно, во время компиляции файла .war фактическое приложение могло перенаправить порт?
Вы можете попробовать добавить RemoteIpValve в META-INF / context.xml вашего веб-приложения, и он заполнит request.serverPort на порт F5 и даже request.remoteAddr на реальный IP-адрес клиента вместо IP-адреса прокси. Затем вы можете генерировать любые ссылки как обычно, и все они будут содержать имя хоста и порт переднего обратного прокси.
В итоге я получил некоторую документацию от разработчика приложения по настройке приложений за балансировщиком нагрузки. Мне пришлось добавить атрибуты proxyName и proxyPort в раздел коннектора моего файла server.xml.
Да, веб-приложения часто перенаправляют, если введенный URL не на 100%, как ожидалось. Начинающие разработчики склонны наивно перенаправлять, то есть заставляют приложение отвечать HTTP 302 http://my-host:8080/proper/link/index.jsp
где они используют жестко закодированный текст для 8080
(а также http
но с перенаправлениями это становится реже).
Другими словами, они используют перенаправление, которое отлично работает на их ноутбуках, но терпит неудачу, когда Tomcat использует другой порт. F5, как и любой другой интерфейс (также известный как «обратный прокси»), перехватывает перенаправление HTTP, и если приложение будет использовать http://server1:8081/xxx
ваш браузер получит https://server:8443/xxx
. Но его путают с 8080 и оставляют как есть.
Мой обычный ответ - сообщить об ошибке разработчикам приложений: запросить перенаправление с использованием номера порта, определенного автоматически (если tomcat когда-нибудь в будущем будет прослушивать 8085, перенаправление должно быть на 8085).