😄Java 获取 Nginx 转发后的用户真实 IP

如何获取用户 IP ?


一般来说,没有使用 Nginx 做请求转发的话,直接调用 HttpServcetRequest 对象的getRemoteAddr() 方法就可以获取到用户的 IP 地址。

 private String getIpAddress(HttpServletRequest request) {
     
        //获取用户IP地址
        String ip = request.getHeader("x-forwarded-for");
 }

使用了 Nginx 做转发后,为什么获取不了用户 IP ?


使用了 Nginx 转发了用户的请求后,用户的请求就是从 Nginx 发出,所以直接调用 getRemoteAddr() 方法获取到的是 Nginx 服务器的地址,而不是用户的地址。

如何获取 Nginx 转发后的真实用户 IP?


需要2个步骤:

  1. 在 Nginx 里面进行配置,将用户的 IP 放到请求头里转发到 Tomcat 服务
  2. 在请求头里面获取出 IP

修改 Nginx 转发配置的时候,添加以下这行到 location 里面将用户真实 IP 保存到请求头:

proxy_set_header X-Real-IP $remote_addr;

X-Real-IP 是自定义的变量名称,再取 IP 的时候,名称要对应上即可

例如:

location / {
   proxy_set_header X-Real-IP $remote_addr;
   proxy_pass http://localhost:8181/;
   root   html;
   index  index.html index.htm;
}

编辑了 Nginx 的配置后,需要重新加载一下 Nginx 的配置 。

获取出用户的真实 IP 地址:

//直接在请求头里面获取即可.
String ipAddress = request.getHeader("X-Real-IP");

还留下一些疑问? 如果是多层 Nginx 转发的话,同样的方式可以获取到吗?

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,135评论 0 4
  • 公元:2019年11月28日19时42分农历:二零一九年 十一月 初三日 戌时干支:己亥乙亥己巳甲戌当月节气:立冬...
    石放阅读 6,949评论 0 2
  • 今天上午陪老妈看病,下午健身房跑步,晚上想想今天还没有断舍离,马上做,衣架和旁边的的布衣架,一看乱乱,又想想自己是...
    影子3623253阅读 2,953评论 3 8