spring 应用服务获取nginx代理后的用户真实ip

Posted 扶不起的刘阿斗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring 应用服务获取nginx代理后的用户真实ip相关的知识,希望对你有一定的参考价值。

@RequestMapping("/")
    public void a(HttpServletRequest request) {
        System.out.println(request.getRemoteAddr()); //ng的地址
        System.out.println(request.getHeader("x-forwarded-for")); //一个或多个地址,每次代理都会多一个ip,所以第一为真实地址(类似于这种形式:192.168.1.2, 192.168.1.3, 192.168.1.n)
        System.out.println(request.getHeader("x-real-ip")); //发给ng的请求的地址
    }

X-Forwarded-For是一个可叠加的过程,后面的代理会把前面代理的IP加入X-Forwarded-For

当只有一层ng时,X-Forwarded-For与x-real-ip值相同。

因此获取真实ip顺序为

  1. 获取X-Forwarded-For第一个ip
  2. 获取x-real-ip
  3. 上面2个都没有的话,只能获取remoteaddr了

以上是关于spring 应用服务获取nginx代理后的用户真实ip的主要内容,如果未能解决你的问题,请参考以下文章

nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP

nginx做反向代理负载均衡 Java怎么获取后端服务器获取用户IP

由于 nginx 反向代理,无法获取用户 ip

服务器使用nginx做代理,通过HttpServletRequest获取请求用户真实IP地址

Nginx反向代理

LNMP-Nginx反向代理