ash*_*eta 39 apache redirect proxypass
我们使用ProxyPass将所有"/ r"请求重定向到端口18080上的jboss,如下所示:
ProxyPreserveHost on
ProxyPass /r http://localhost:18080/redirectService/
ProxyPassReverse /r http://localhost:18080/redirectService/
Run Code Online (Sandbox Code Playgroud)
但是,这会导致jboss访问日志中记录的IP地址为"127.0.0.1".有人知道我们如何保留HttpServletRequest中请求所在的原始IP?我们希望在doGet()中从jboss servlet请求中获取它
Ste*_*fen 28
JasonW的答案很好.但是自apache httpd 2.4.6以来就有了另一种选择:mod_remoteip
你必须做的就是:
启用模块:
LoadModule remoteip_module modules/mod_remoteip.so
Run Code Online (Sandbox Code Playgroud)将以下内容添加到您的apache httpd配置中.请注意,您必须添加此行不为代理服务器的配置.您必须将其添加到代理目标httpd服务器(代理服务器后面的服务器)的配置中:
RemoteIPHeader X-Forwarded-For
Run Code Online (Sandbox Code Playgroud)有关更多信息和更多选项,请参阅http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html.
小智 13
这有一个更优雅的解释和不止一个可能的解决方案.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
如果你有能力这样做,我建议使用mod-jk或mod-proxy-ajp将请求从Apache传递给JBoss.与使用HTTP代理请求相比,AJP协议更有效,并且作为一个好处,JBoss将看到请求来自原始客户端而不是Apache.
如果您使用 Apache 反向代理为在本地主机端口上运行的应用程序提供服务,您必须向您的虚拟主机添加一个位置。
<Location />
ProxyPass http://localhost:1339/ retry=0
ProxyPassReverse http://localhost:1339/
ProxyPreserveHost On
ProxyErrorOverride Off
</Location>
Run Code Online (Sandbox Code Playgroud)
要获取 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
Run Code Online (Sandbox Code Playgroud)
所以要么使用 req.ip 要么 req.headers['x-forwarded-for']
归档时间: |
|
查看次数: |
99343 次 |
最近记录: |