由于使用了nginx反向代理,所在使用普通的ip获取方式,获取到的ip很可能是nginx的ip地址,所以为了解决这个问题,在Linux Nginx 配置(二)中,我已经进行了真实IP的配置,接下来,我们在代码中使用以下代码即可
public static String getIpAddr(HttpServletRequest request) {
String unknown = "unknown";
String ip = request.getHeader("X-real-ip");// 先从nginx自定义配置获取
if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getHeader("x-forwarded-for");
}
if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}