问题描述
使用nginx做反向代理,后端是java,如何在java代码中使用request.getRemoteAddr();获取用户访问的真实IP。
解决方法
修改nginx配置如下:
upstream www.xxx.com {
ip_hash;
server serving-server1.com:80;
server serving-server2.com:80;
}
server {
listen www.xxx.com:80;
server_name www.xxx.com;
location / {
proxy_pass http://www.xxx.cn;
}
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
关键是以下三条指令:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
加入之后重启nginx,就可以用request.getHeader("X-Forwarded-For");
获取真实IP了。