如何获取客户端真实ip地址

转载 2018年04月17日 18:42:23

    在项目中需要获取客户端的真实IP地址,原本使用的是request.getRemoteAddr(),后来发布到服务器上时发现取到的值一直是127.0.0.1

      原因是,在部署时用了nginx进行反向代理,

(小插曲:配nginx的时候一定要记得配 X-Real-IP和 X-Forwarded-For如下,不然还是取不到啊)


解决办法:

      经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了 X-Real-IP和 X-Forwarded-For信息。即可获取。

public static String getIpAddress(HttpServletRequest request) {  
        String ip = request.getHeader("x-forwarded-for");  
        String xip = request.getHeader("X-Real-IP");
        if(ip != null && ip.length()!=0 && !ip.equalsIgnoreCase("unKnown")){
        	int index = ip.indexOf(",");
        	if(index != -1){
        		return ip.substring(0,index);
        	}else{
        		return ip;
        	}
        }
        ip = xip;
        if(ip != null && ip.length()!=0 && !ip.equalsIgnoreCase("unKnown")){
        	return ip;
        }
        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;  
    }
参考:http://dpn525.iteye.com/blog/1132318

关于WEB应用程序的打印组件开发初探

 一、引言  近些年来,随着互联网的普及和推广,传统的单机模式和局域中的C/S模式的应用程序越来越不能满足信息共享的要求。因此,一种新的基于浏览器的B/S的应用程序的开发方式被提了出来。新的开发方案以...
  • ChenHui
  • ChenHui
  • 2001-01-06 16:03:00
  • 1059

.net取得客户端真实IP

/// /// 取得客户端真实IP。如果有代理则取第一个非内网地址 /// public static string IPAddress ...
  • PeterZhuGe
  • PeterZhuGe
  • 2016-11-25 11:22:44
  • 1877

F5负载均衡获取客户端真实IP

1.在F5上配置X-Forwarded-For
  • ycdayan
  • ycdayan
  • 2014-06-06 10:19:44
  • 965

Nginx在多层代理下获取真实客户端IP地址

最近在研究nginx中如何获取真实客户端IP的方法。众所周知,在编译Nginx时,可通过添加http_realip_module模块来获取真实客户端IP地址。何为真实IP地址呢?请看下图,既获取到的真...
  • ai2000ai
  • ai2000ai
  • 2017-04-19 10:57:35
  • 2269

干货:Java正确获取客户端真实IP方法整理

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真...
  • youanyyou
  • youanyyou
  • 2018-02-28 22:28:58
  • 103

C#获取真实的客户端IP地址,包括内网代理

分类:             开发点滴              2012-02-21 15:17     1245人阅读     评论(0)     收藏     举报     ...
  • oMingZi12345678
  • oMingZi12345678
  • 2013-09-13 21:24:22
  • 2252

Java获取客户端/访问者真实IP地址的两种方法

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I...
  • qq_14918243
  • qq_14918243
  • 2016-05-19 11:32:28
  • 2178

【ASP接口开发】获取访问URL的真实客户端IP地址

目前项目中需要获取到访问
  • u011156012
  • u011156012
  • 2014-11-24 15:31:22
  • 1693

asp 获取客户端真实IP

原文:http://blog.csdn.net/lybwwp/article/details/17415929
  • shileimohan
  • shileimohan
  • 2015-06-23 16:13:06
  • 696

获取客户端和服务端的真实IP地址

/**      * 该方法获取请求客户端的真实IP地址 如果Web服务器部署在Proxy服务器之后,需要作特殊处理:      *      * @param request      *...
  • zelda002
  • zelda002
  • 2014-11-19 14:08:19
  • 3930
收藏助手
不良信息举报
您举报文章:如何获取客户端真实ip地址
举报原因:
原因补充:

(最多只允许输入30个字)