美文网首页
😄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