从JBoss6迁移至WildFly10:request.getRemoteAddr()返回值差异及适配咨询
问题背景与差异原因
首先,这个差异的核心源于JBoss 6和WildFly 10在HTTP Connector代理地址转发配置上的默认行为不同:
- 在JBoss 6中,HTTP Connector的
proxy-address-forwarding属性默认值为false。如果你的部署环境存在反向代理(比如Nginx、Apache,且代理服务器与应用服务器部署在同一台机器,IP为127.0.0.1),request.getRemoteAddr()会直接返回代理服务器的IP(也就是127.0.0.1),因为此时服务器不会去解析代理传递的X-Forwarded-For、X-Real-IP等头部信息。 - 而WildFly 10调整了默认配置逻辑,默认情况下可能已经启用了
proxy-address-forwarding="true"(或者默认支持解析代理头部)。当该属性为true时,应用服务器会优先从代理传递的头部中提取真实的客户端IP,因此request.getRemoteAddr()会返回客户端的真实远程IP,而非代理服务器的IP。
实现WildFly 10返回127.0.0.1的方案
要让WildFly 10和JBoss 6的返回结果保持一致,你需要修改WildFly的Connector配置,关闭代理地址转发功能:
- 打开WildFly的配置文件,独立模式下通常是
standalone/configuration/standalone.xml,域模式下则是domain/configuration/domain.xml。 - 找到HTTP Connector的配置节点,通常看起来是这样:
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/> - 添加或修改
proxy-address-forwarding属性为false,修改后的配置如下:<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http" proxy-address-forwarding="false"/> - 保存配置文件后,重启WildFly服务器。
这样修改后,request.getRemoteAddr()就会和JBoss 6一样,返回代理服务器的IP(127.0.0.1,当代理与应用服务器同机时),而不是客户端的真实IP。
内容的提问来源于stack exchange,提问作者Pavan Patidar
相关产品推荐
相关产品推荐

