我们使用 ProxyPass 将所有“/r”请求重定向到端口 18080 上的 jboss,如下所示:

ProxyPreserveHost on
ProxyPass /r http://localhost:18080/redirectService/
ProxyPassReverse /r http://localhost:18080/redirectService/

但是,这会导致 jboss 的访问日志中记录的 IP 地址为“127.0.0.1”。有人知道我们如何保留 HttpServletRequest 中请求来源的原始 IP 吗?我们希望通过 doGet() 中的 jboss servlet 请求来访问它

有帮助吗?

解决方案

可以得到从原始主机 X - 转发,对于报头字段

其他提示

JasonW的回答很好。但从 apache httpd 2.4.6 开始,有一个替代方案:mod_remoteip

您必须做的就是:

  1. 可能您必须安装 mod_remoteip 软件包
  2. 启用模块:

    LoadModule remoteip_module modules/mod_remoteip.so
    
  3. 将以下内容添加到您的 apache httpd 配置中。请注意,您必须添加这一行 不是 进入代理服务器的配置。你必须 将其添加到代理目标 httpd 服务器的配置中 (代理后面的服务器):

    RemoteIPHeader X-Forwarded-For
    

参见 http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html 了解更多信息和更多选择。

这具有更优雅的解释和多于一个可能的解决方案。 http://kasunh.wordpress.com/2011 / 10/11 /保持-远程iphost·维持同时代理/

在后描述了如何使用一个流行和一个不太知名的Apache模块保存主机/ IP,而在一个安装涉及代理。

  

使用mod_rpaf模块,安装并使其能够在后端服务器,并添加在模块的配置以下指令。   RPAFenable在结果   RPAFsethostname在结果   RPAFproxy_ips 127.0.0.1

(2017编辑)的mod_rpaf当前位置: https://github.com/gnif/mod_rpaf

如果你有能力这样做,我会建议您使用 MOD-JK MOD-代理AJP 通过从Apache到JBoss的请求。该AJP协议是更有效的与使用HTTP代理请求和作为一个好处,JBoss会看到请求从原始客户端,而不是来自阿帕奇。

如果您使用的是Apache反向代理用于服务本地主机端口上运行的应用程序,你必须添加一个位置,你的虚拟主机。

<Location />            
   ProxyPass http://localhost:1339/ retry=0
   ProxyPassReverse http://localhost:1339/
   ProxyPreserveHost On
   ProxyErrorOverride Off
</Location>

要获取IP地址有以下选项

console.log(">>>", req.ip);// this works fine for me returned a valid ip address 
console.log(">>>", req.headers['x-forwarded-for'] );// returned a valid IP address 
console.log(">>>", req.headers['X-Real-IP'] ); // did not work returned undefined 
console.log(">>>", req.connection.remoteAddress );// returned the loopback IP address 

因此,无论使用req.ip或req.headers [ '的x转发-关于']

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top