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

简介:

  在很多负载均衡设备的部署过程中,我们都无法更改服务器的网关(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



相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
17天前
|
网络安全 Apache
Apache服务器安装SSL证书
Apache服务器安装SSL证书
19 0
|
1月前
|
网络协议 Shell 网络安全
实验目的1.编译安装httpd2.优化路径3.并将鲜花网站上传到web服务器为网页目录4.在客户机访问网站http://www.bdqn.com
实验目的1.编译安装httpd2.优化路径3.并将鲜花网站上传到web服务器为网页目录4.在客户机访问网站http://www.bdqn.com
164 0
|
6天前
|
安全 Java 网络安全
Servlet 教程 之 Servlet 客户端 HTTP 请求 2
Servlet教程介绍了如何在Servlet中处理HTTP请求,包括获取Cookie、头信息、参数、Session等。方法如:`getCookies()`、`getAttributeNames()`、`getHeaderNames()`、`getParameterNames()`等。还能获取身份验证类型、字符编码、MIME类型、请求方法、远程用户信息、URL路径、安全通道状态以及请求内容长度等。此外,可通过`getSession()`创建或获取Session,并以`Map`形式获取参数。
20 8
|
5天前
|
XML Java 数据格式
Servlet 教程 之 Servlet 服务器 HTTP 响应 3
`Servlet`教程示例展示了如何创建一个HTTP响应,使用`@WebServlet("/Refresh")`的`Refresh`类继承`HttpServlet`。在`doGet`方法中,设置了`Refresh`头以每5秒自动刷新,并用`setContentType("text/html;charset=UTF-8")`设定内容类型。还使用`Calendar`和`SimpleDateFormat`获取并格式化当前时间显示。相应的`web.xml`配置指定了Servlet路径。当访问此Servlet时,页面将每5秒更新一次显示的系统时间。
16 4
|
2天前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
9 3
|
6天前
|
Java API Apache
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
【4月更文挑战第11天】ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
24 11
|
7天前
|
存储 Java 网络安全
ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
【4月更文挑战第10天】ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
13 1
|
1月前
|
Shell Linux 网络安全
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 httpd命令 使用指南
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 httpd命令 使用指南
30 0
|
1月前
|
Shell Linux Apache
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 apachectl命令 使用教程
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 apachectl命令 使用教程
162 1
|
1月前
|
数据采集 缓存 前端开发
http和https请求服务器的时候在请求头部分都带什么到服务器呢?
HTTP和HTTPS请求头基本结构相似,HTTPS多了一层SSL/TLS加密。常见请求头如Accept(指定内容类型)、Authorization(身份验证)、Cookie(会话跟踪)、User-Agent(标识用户代理)等。HTTPS特有的头包括Upgrade-Insecure-Requests(升级到HTTPS)、Strict-Transport-Security(强制使用HTTPS)、Sec-Fetch-*(安全策略)和X-Content-Type-Options、X-Frame-Options等(增强安全性)。实际应用中,请求头会根据需求和安全策略变化。
21 0

推荐镜像

更多