在Apache服务器上如何从HTTP header中提取客户端X-ClientIP
2012-04-09 15:59
525 查看
在很多负载均衡设备的部署过程中,我们都无法更改服务器的网关(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
另外,在部署过程中,开启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
相关文章推荐
- Android httpclient如何让客户端提示服务器close连接
- Android 中 HttpClient作客户端,Tomcat Servlet作服务器的交互示例
- NAT负载均衡方式,apache如何在日志中记录客户端IP
- DataSnap服务器如何得到客户端的IP和端口
- 使用apache 等反向代理后如何获得客户端的真实ip
- 为 Android 开发访问 JAX-RS Web 服务的 Apache HttpClient 客户端 学习创建 Apache HttpClient Android 客户端
- HttpClient作客户端,Tomcat Servlet作服务器的交互示例
- Java用org.apache.http.client的HttpClient发送Post请求 可获取返回Header
- Android网络(3):HttpClient作客户端,Tomcat Servlet作服务器的交互示例
- Java--org.apache.http.client的HttpClient发送Post请求,获取返回Header
- 如何通过httpclient获取访问域名的真实ip
- Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口
- X-Forwarded-For 负载均衡 7 层 HTTP 模式获取来访客户端真实 IP 的方法(IIS/Apache/Nginx/Tomcat)
- PHP获得真实客户端的真实IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR
- Android网络(3):HttpClient作客户端,Tomcat Servlet作服务器的交互示例
- Apache http 服务器如何启用和设置 https 连接以提供加密的 http 通讯教程
- Apache http 服务器如何启用和设置 https 连接以提供加密的 http 通讯教程
- 如何用java代码访问远程web服务器(手写一个自己的httpClient)
- Apache http 服务器如何启用和设置 https 连接以提供加密的 http 通讯教程
- PHP获得真实客户端的真实IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR