阿帕奇代理通行证:如何保留原始IP地址
题
我们使用 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
您必须做的就是:
- 可能您必须安装 mod_remoteip 软件包
启用模块:
LoadModule 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 /保持-远程iphost·维持同时代理/
在后描述了如何使用一个流行和一个不太知名的Apache模块保存主机/ IP,而在一个安装涉及代理。
使用mod_rpaf模块,安装并使其能够在后端服务器,并添加在模块的配置以下指令。 RPAFenable在结果 RPAFsethostname在结果 RPAFproxy_ips 127.0.0.1
(2017编辑)的mod_rpaf当前位置: https://github.com/gnif/mod_rpaf
如果您使用的是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转发-关于']