получение исходного порта клиента в настройках HTTPD -> Tomcat - PullRequest
5 голосов
/ 22 марта 2012

У меня есть 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?

Ответы [ 2 ]

3 голосов
/ 30 января 2013

Вы можете добавить заголовок запроса с именем X-Forwarded-SourcePort с помощью mod_rewrite + mod_headers

RewriteEngine on
RewriteRule .* - [E=REMOTE_PORT:%{REMOTE_PORT},NE]
RequestHeader set X-Forwarded-SourcePort %{REMOTE_PORT}e

Apache направит запрос с исходным портом клиента на внутренний сервер, чтобы вы могли получить заголовок запроса X-Forwarded-SourcePort из своего приложения.

0 голосов
/ 22 марта 2012

Полагаю, вы можете сделать это с помощью модуля mod_rewrite

В RewriteRule вы можете указать переменные сервера в строке Substitution , как указано в документации

In addition to plain text, the Substition string can include

    back-references ($N) to the RewriteRule pattern
    back-references (%N) to the last matched RewriteCond pattern
    server-variables as in rule condition test-strings (%{VARNAME})

Одной из этих переменных является REMOTE_PORT. Затем вы можете переписать свой URL и передать его в качестве параметра URL на ваш вызов сервлета Tomcat, например,

http://url.to.tomcat/mycontext?remoteport=${REMOTE_PORT}

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