使用阿里云或 Nginx 做负载均衡时获取真实 IP
使用 阿里云的负载均衡或 Nginx 做反代的时候在 Web Application 中获取到的不是真实的用户 IP,解决办法有以下几种:
-
使用 Nginx 时 在配置文件中添加
proxy_set_header X-real-ip $remote_addr;
有了这句就可以在 web APP 的 request header 中找到 X-real-ip,里面就是真实的 IP。 -
使用阿里云负载均衡时 阿里云提供的官方的 最佳实践文档 。
但是,这种方法有个弊病就是需要配置文件里面把 proxy 的请求 IP 全写进去,而且如果他们的服务器集群扩容,而你不知道, 那么很可惜扩容的服务器发起的请求,在您的日志中记录的都是他的服务器 IP 而不是访客的 IP,这个方法不够优雅。
但是在实际使用中,我打印了一下获取的 header,发现有个
Remoteip
的 key,获取 value 就是真实的 IP 了。 -
上面两者同时使用 两者同时使用的时候只需要按照第二种办法来获取就好,Nginx 中设置的 X-real-ip 实际是阿里负载均衡的地址。