我们使用ProxyPass将所有“/ r”请求redirect到端口18080上的jboss,如下所示:
ProxyPreserveHost on ProxyPass /r http://localhost:18080/redirectService/ ProxyPassReverse /r http://localhost:18080/redirectService/
但是,这导致jboss的访问日志中logging的IP地址为“127.0.0.1”。 有人知道我们怎样才能保持HttpServletRequest请求来源的原始IP? 我们想从doGet()中的jboss servlet请求中获取它,
您可以从X-Forwarded-For标题字段获取原始主机。
JasonW的回答很好。 但是由于apache httpd 2.4.6有一个替代方案:mod_remoteip
所有你必须做的是:
启用模块:
Loadmodulee remoteip_module modules/mod_remoteip.so
将以下内容添加到您的apache httpd配置中。 请注意,您必须将此行添加到代理服务器的配置中。 您必须将其添加到代理目标httpd服务器 (代理服务器后面的服务器)的配置中:
RemoteIPHeader X-Forwarded-For
有关更多信息和更多选项,请参见http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html 。
这有一个更优雅的解释和不止一个可能的解决方案。 http://kasunh.wordpress.com/2011/10/11/preserving-remote-iphost-while-proxying/
这篇文章描述了如何在一个涉及代理的设置中使用一个流行的和一个较少的Apache模块来保存主机/ IP。
使用mod_rpaf模块,在后端服务器中安装并启用它,并在模块配置中添加以下指令。 RPAFenable On
RPAFsethostname在
RPAFproxy_ips 127.0.0.1
(2017编辑)mod_rpaf的当前位置: https : //github.com/gnif/mod_rpaf
如果你有这个能力,我建议使用mod-jk或者mod-proxy-ajp把请求从Apache传递给JBoss。 与使用HTTP代理请求相比,AJP协议更有效率,作为一个好处,JBoss会将请求视为来自原始客户端,而不是Apache。