nginx做转发后如何获取用户的真实ip

nginx做转发后如何获取用户的真实ip

在之前的文章《nginx+tomcat单个域名及多个域名配置》中有介绍过利用nginx做转发,但后端同事发现在获取用户的ip时得到的地址竟然都是服务器的ip地址,这又是为什么呢?接下来我们进行分析及给出解决方案。

nginx在做反向代理的时候,其实是代替用户去访问服务器,当用户的请求包经过反向代理后,nginx会将这个ip数据包的ip请求头做一些修改,最终导致web服务器得到的数据包的头部的源ip地址是代理服务器的ip地址,这样后端记录的ip就没有任何意义了。在用nginx做集群或反向代理时,应让后端web服务器能获取到用户的真实ip地址。

在nginx的nginx.conf里做如下修改:

location / {
         proxy_pass http://xxx.xxx.xxx.xx;
         proxy_set_header host $host;
         proxy_set_header X-Real-IP $remote_addr;
};

通过上面的配置可以发现,X-Real-IP就是用户的真实ip地址。

然后在后端通过如下代码获取用户ip地址:

request.getHeader(“X-Real-IP”)