在使用nginx做代理时,服务端如果直接从 X-Forwarded-For 头部获取来源IP,将获取到nginx所在的ip地址,而不是请求的真实ip地址。
如何获取请求的真实IP地址
首先,在nginx配置中添加如下配置
server { listen 80; server_name www.wenki.info; #要访问的域名 charset utf8; location / { proxy_pass http://server; 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中将请求来源IP添加到代理请求头部,然后使用命令重新加载配置
nginx -s reload
服务端使用以下代码即可获取请求主机真实IP地址
public static String realIP(HttpServletRequest request) { String xff = request.getHeader("x-forwarded-for"); if (xff != null) { int index = xff.indexOf(','); if (index != -1) { xff = xff.substring(0, index); } return xff.trim(); } return request.getRemoteAddr(); }