У меня есть httpd-сервер, настроенный для обработки HTTPS-соединений и перенаправления соединений на Tomcat (через http или ajp), где обрабатываются запросы. Одно из требований, предъявляемых к серверу Tomcat, заключается в регистрации номера удаленного порта для каждого запроса. Если я нажму на Tomcat напрямую, получение номера удаленного порта будет простым, и мы сейчас делаем это с помощью функции getRemotePort()
(HttpServletRequest).
Однако, поскольку я делаю обратный прокси-сервер (пересылаю HTTPS-запросы через HTTP / AJP), будет создано новое соединение, и я всегда получу удаленный порт (и, в этом отношении, удаленный IP-адрес) для соединения от моего От сервера httpd до tomcat (кроме случаев, когда я использую AJP. В этом случае информация об IP-адресе удаленного сервера отображается правильно).
Я пробовал разные конфигурации на httpd, например:
ProxyPreserveHost On
ProxyPass / ajp://localhost:8009/
или
ProxyPreserveHost On
ProxyPass / http://localhost:8081/
Я тоже немного поиграл с RewriteRules, но не смог заставить все работать.
Читая документацию httpd, mod_proxy предлагает информацию заголовка запроса для таких вещей, как X-Forwarded-Host
, X-Forwarded-For
и т. Д. Но информация о порте источника отсутствует.
Я даже обнаружил ошибку , когда, по-видимому, атрибут X-Forwarded-Port
был добавлен в заголовок запроса прокси, но этот код, по-видимому, не был связан с основной строкой / ветвью.
Итак, в итоге, как я могу получить исходный порт клиента (не обратного прокси-сервера), когда HTTPD пересылает запросы в Tomcat?