在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断,或者统计ip访问次数等,通常情况下我们使用 request.getRemoteAddr() 就可以获取到客户端ip,但是当我们使用了nginx 作为反向代理后,使用 request.getRemoteAddr() 获取到的就一直是nginx 服务器的ip的地址,那这时应该怎么办?

其实,nginx是可以获得用户的真实ip的,也就是说nginx使用$remote_addr变量时获得的是用户的真实ip,如果我们想要在web端获得用户的真实ip,就必须在nginx里作一个赋值操作,即我在下面的配置:

proxy_set_header X-Real-IP $remote_addr;

默认情况下我们使用request.getAttribute("X-Forwarded-For")获取不到用户的真实ip,如果我们想要通过这个变量获得用户的真实ip,我们需要自己在nginx添加配置:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;