服务器使用nginx做代理,通过HttpServletRequest获取请求用户真实IP地址

在使用nginx做代理时,服务端如果直接从 X-Forwarded-For 头部获取来源IP,将获取到nginx所在的ip地址,而不是请求的真实ip地址。

如何获取请求的真实IP地址

首先,在nginx配置中添加如下配置

server {
listen ;
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();
}
上一篇:面试十题(1)


下一篇:快速排序