首先,我先来介绍一下什么是F5服务器

负载均衡,英文名称为Load Balance,其意思就是将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。需要说明的是:负载均衡设备不是基础网络设备,而是一种性能优化设备。对于网络应用而言,并不是一开始就需要负载均衡,当网络应用的访问量不断增长,单个处理单元无法满足负载需求时,网络应用流量将要出现瓶颈时,负载均衡才会起到作用。

负载均衡有两方面的含义:首先,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高,这就是我们常说的集群(clustering)技术。第二层含义就是:大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间,这主要针对Web服务器、FTP服务器、企业关键应用服务器等网络应用。

其实可以利用HTTP请求中的X-Forwarded-For属性

X-Forwarded-For说明

X-Forwarded-For: client1, proxy1, proxy2

所以只要F5设置好记录每次X-Forwarded-For的值,然后就可以获取具体IP了:

下面附上同事写好的方法代码:

/**
* @Description: 获取客户端IP
* @param @return
* @return String
* @throws
*/
public static String getClientAddress() {
//CXF获取Http对象
Message message = PhaseInterceptorChain.getCurrentMessage();
//获取请求信息
HttpServletRequest req = (HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST);
//获取ip信息串
String ip = req.getHeader("x-forwarded-for");
log.info("the ip from header X-Forwarded-For:"+ip);
if (ip != null) {
if (ip.indexOf(',') == -1) {
return ip;
}
return ip.split(",")[0];
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
//如果x-forwarded-for属性为空,则走原来的获取IP逻辑
ip = req.getRemoteAddr();
log.info("the proxy ip:"+ip);
}
return ip;
}