在很多负载均衡设备的部署过程中,我们都无法更改服务器的网关(Gateway)地址,不能将其指向负载均衡设备,通常我们把这种部署方式称之为“单臂”或者“旁路”部署。在这种部署方式下,往往在负载均衡设备上需要启用源地址转换(Source NAT)功能,以保证服务器返回的数据包都通过负载均衡设备。如图所示,其中“AX-IP”就是配置在负载均衡设备上的Source NAT Pool里的地址:
另外,在部署过程中,开启TCP连接复用功能,也需要在负载均衡设备上启用源地址转换功能,开启这种转换功能最大的一个问题就是,服务器端无法从TCP 数据包头中获取到发送HTTP请求的客户端真实IP地址,这样就会影响到系统的访问统计和审计等。为了给Web服务器提供客户端的真实IP,通常负载均衡设备的做法是将真实IP地址插入到HTTP header中,起一个字段名,例如“X-ClientIP”或者“X-forwarded-for”等。Web服务器提取该字段的值,即客户端真实IP地址,将其作为统计的依据即可。那么如果提取呢?下面,我们以Apache服务器为例给大家简单介绍一下提取的方法:
1、首先,在AX设备上配置相应的HTTP模板,并在VIP的虚拟端口(vport)下启用该HTTP模板;
2、在Apache服务器上编辑httpd.conf文件
httpd.conf文件缺省是安装在Unix或者Linux的/etc/apache目录下,Windows系统的:\Program files\Apache Software Foundation\Apache\conf目录下。编辑该文件,在以“LogFormat”开头的最后一行下面,添加自定义的log格式,如下红色字体所示:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{User-Agent}i\" \"%{Cookie}i\"" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
LogFormat "%{X-ClientIP}i %l %u %t \"%r\" %>s %b" AX-log
3、在httpd.conf文件中,找到以“CustomLog”开头的行,将其注释掉,并添加如下的Log格式:
# Test if header ″X-ClientIP″ is present, log format uses ″AX-log″
SetEnvIf X-ClientIP ″^$″ req-non-proxy
CustomLog logs/access.log AX-log env=req-non-proxy
4、保存httpd.conf文件,并重启Apache服务进程;
我们可以尝试访问AX设备上的虚拟服务器VIP地址,并在对应的Apache服务器日志中,验证是否已经配置成功。
S.G
本文转自 virtualadc 51CTO博客,原文链接:
http://blog.51cto.com/virtualadc/830034