美文网首页
😄Java 获取 Nginx 转发后的用户真实 IP

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

作者: Franck_ | 来源:发表于2021-11-11 21:02 被阅读0次

如何获取用户 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 转发的话,同样的方式可以获取到吗?

相关文章

网友评论

      本文标题:😄Java 获取 Nginx 转发后的用户真实 IP

      本文链接:https://www.haomeiwen.com/subject/lzbgzltx.html