在HTTPD - > Tomcat设置上检索客户端源端口

alp*_*alp 5 apache tomcat

我有一个配置为处理HTTPS连接的httpd服务器,并将连接转发到处理请求的Tomcat(通过http或ajp).我在Tomcat服务器中的一个要求是记录每个请求的远程端口号.如果我直接点击Tomcat,检索远程端口号是直截了当的,我们目前正在使用该getRemotePort()函数(HttpServletRequest).

但是,由于我正在进行反向代理(通过HTTP/AJP转发HTTPS请求),因此将创建一个新连接,并且我将始终从我的httpd服务器获取连接的远程端口(以及远程IP). tomcat(除非我使用AJP.在这种情况下,远程服务器IP信息正确).

我在httpd上尝试过不同的配置,比如:

ProxyPreserveHost On
ProxyPass / ajp://localhost:8009/
Run Code Online (Sandbox Code Playgroud)

要么

ProxyPreserveHost On
ProxyPass / http://localhost:8081/
Run Code Online (Sandbox Code Playgroud)

我也用RewriteRules做了一点点,但是无法让事情发挥作用.

阅读的httpd文件,mod_proxy的报价请求之类的报头信息 X-Forwarded-Host,X-Forwarded-For等等.但没有关于源端口没有资料.

甚至发现了一个错误,显然有一个X-Forwarded-Port属性被添加到代理请求标头中,但该代码似乎没有对主线/分支进行.

因此,总之,当HTTPD将请求转发给Tomcat时,如何检索客户端的源端口(而不是反向代理)?

Bru*_*der 0

我相信你可以使用 mod_rewrite 模块来做到这一点

RewriteRule中,您可以在替换字符串中指定服务器变量,如文档中所述

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})
Run Code Online (Sandbox Code Playgroud)

这些变量之一是REMOTE_PORT. 然后,您可以重写您的 URL 并将其作为 URL 参数传递给您的 Tomcat servlet 调用,例如

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