使用 阿里云的负载均衡或 Nginx 做反代的时候在 Web Application 中获取到的不是真实的用户 IP,解决办法有以下几种:

  1. 使用 Nginx 时 在配置文件中添加 proxy_set_header X-real-ip $remote_addr;有了这句就可以在 web APP 的 request header 中找到 X-real-ip,里面就是真实的 IP。

  2. 使用阿里云负载均衡时 阿里云提供的官方的 最佳实践文档

    但是,这种方法有个弊病就是需要配置文件里面把 proxy 的请求 IP 全写进去,而且如果他们的服务器集群扩容,而你不知道, 那么很可惜扩容的服务器发起的请求,在您的日志中记录的都是他的服务器 IP 而不是访客的 IP,这个方法不够优雅。

    但是在实际使用中,我打印了一下获取的 header,发现有个 Remoteip 的 key,获取 value 就是真实的 IP 了。

  3. 上面两者同时使用 两者同时使用的时候只需要按照第二种办法来获取就好,Nginx 中设置的 X-real-ip 实际是阿里负载均衡的地址。