在Apache服务器上如何从HTTP header中提取客户端X-ClientIP

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介:

  在很多负载均衡设备的部署过程中,我们都无法更改服务器的网关(Gateway)地址,不能将其指向负载均衡设备,通常我们把这种部署方式称之为“单臂”或者“旁路”部署。在这种部署方式下,往往在负载均衡设备上需要启用源地址转换(Source NAT)功能,以保证服务器返回的数据包都通过负载均衡设备。如图所示,其中“AX-IP”就是配置在负载均衡设备上的Source NAT Pool里的地址:

 

image

        另外,在部署过程中,开启TCP连接复用功能,也需要在负载均衡设备上启用源地址转换功能,开启这种转换功能最大的一个问题就是,服务器端无法从TCP 数据包头中获取到发送HTTP请求的客户端真实IP地址,这样就会影响到系统的访问统计和审计等。为了给Web服务器提供客户端的真实IP,通常负载均衡设备的做法是将真实IP地址插入到HTTP header中,起一个字段名,例如“X-ClientIP”或者“X-forwarded-for”等。Web服务器提取该字段的值,即客户端真实IP地址,将其作为统计的依据即可。那么如果提取呢?下面,我们以Apache服务器为例给大家简单介绍一下提取的方法:

1、首先,在AX设备上配置相应的HTTP模板,并在VIP的虚拟端口(vport)下启用该HTTP模板;

image

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



相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
3月前
|
Dubbo 安全 应用服务中间件
Apache Dubbo 正式发布 HTTP/3 版本 RPC 协议,弱网效率提升 6 倍
在 Apache Dubbo 3.3.0 版本之后,官方推出了全新升级的 Triple X 协议,全面支持 HTTP/1、HTTP/2 和 HTTP/3 协议。本文将围绕 Triple 协议对 HTTP/3 的支持进行详细阐述,包括其设计目标、实际应用案例、性能测试结果以及源码架构分析等内容。
|
3月前
|
搜索推荐 安全 网络安全
服务器支持HTTPS的时机和条件
【10月更文挑战第23天】服务器支持HTTPS的时机和条件
47 5
|
4月前
使用Netty实现文件传输的HTTP服务器和客户端
本文通过详细的代码示例,展示了如何使用Netty框架实现一个文件传输的HTTP服务器和客户端,包括服务端的文件处理和客户端的文件请求与接收。
115 1
使用Netty实现文件传输的HTTP服务器和客户端
|
5月前
HAProxy的高级配置选项-配置haproxy支持https协议及服务器动态上下线
文章介绍了如何配置HAProxy以支持HTTPS协议和实现服务器的动态上下线。
218 8
|
6月前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
6月前
|
数据库连接 Apache Java
【独家揭秘】图书管理系统的奇幻之旅:一文看透Apache Wicket如何从想法萌芽到服务器上翩翩起舞?
【8月更文挑战第31天】本文通过实战案例,详细介绍从概念到部署的Apache Wicket应用开发全流程。以在线图书管理系统为例,涵盖应用概念定义、项目创建、架构设计、首页编写、数据库交互及应用部署等关键步骤。通过Maven或Gradle引入Wicket依赖,设计包结构,并使用JPA或Hibernate处理数据持久化。最终,将应用配置并部署到Tomcat或Jetty服务器,帮助你全面掌握Wicket开发技巧。
62 0
|
6月前
|
监控 Linux 测试技术
|
6月前
|
监控 安全 网络安全
如何保护 Apache 服务器的安全
【8月更文挑战第23天】
141 0

推荐镜像

更多