获取nginx做反向代理时的真实IP

String ip = request.getHeader("X-Real-IP");
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Forwarded-For");
} else {
return ip;
}
if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
} else {
int index = ip.indexOf(',');
if (index != -1) {
ip = ip.substring(0, index);
}
}
return ip;


当只有一层nginx反向代理时,可以通过“HTTP_X_REAL_IP”取得client的真实IP。


如果有二层nginx反向代理,则client的真实IP被包含在“HTTP_X_FORWARDED_FOR”中。


最不可信的是“REMOTE_ADDR”,它的内容完全可以被client指定!总之只要编译和配置正确,“HTTP_X_FORWARDED_FOR”总是包含了client的真实IP。

猜你喜欢

转载自lanyan-lan.iteye.com/blog/2330602