42

我们正在使用 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 请求访问它

4

5 回答 5

34

您可以从X-Forwarded-For标头字段中获取原始主机。

于 2009-04-17T12:54:45.123 回答
34

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
    # replace IP with the remote server you trust
    RemoteIPInternalProxy 10.123.123.1/24
    

有关更多信息和更多选项,请参见http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html

安全警告!仅对您信任的代理执行此操作。否则有人可以伪造他们的IP。

于 2015-06-11T14:51:52.933 回答
14

这有更优雅的解释和不止一种可能的解决方案。http://kasunh.wordpress.com/2011/10/11/preserving-remote-iphost-while-proxying/

这篇文章描述了如何在涉及代理的设置中使用一个流行的和一个鲜为人知的 Apache 模块来保留主机/IP。

使用 mod_rpaf 模块,在后端服务器中安装并启用它,并在模块的配置中添加以下指令。RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1

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

于 2011-11-26T05:36:05.990 回答
8

如果您有能力这样做,我建议使用mod-jkmod-proxy-ajp将请求从 Apache 传递到 JBoss。与使用 HTTP 代理请求相比,AJP 协议效率更高,而且作为一个好处,JBoss 会将请求视为来自原始客户端而不是 Apache。

于 2009-04-17T21:41:02.347 回答
7

如果您使用 Apache 反向代理来为在 localhost 端口上运行的应用程序提供服务,则必须将位置添加到您的虚拟主机。

<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-forwarded-for']

于 2018-01-16T07:00:18.130 回答