
# 配置请求头和响应头字段转发
**云模式-CNAME接入** 或**独享模式接入**场景下，WAF作为客户端和源站服务器之间的反向代理，具备请求和响应的中转能力。配置请求头和响应头字段转发后，WAF可在中转过程中，将自定义标识信息注入请求头和响应头Header字段。
#### 原理介绍
- **请求头字段转发**
  当客户端发起请求时，WAF先接收请求，按配置的 "请求头字段" 规则注入Key-Value信息，再将携带新字段的请求转发给源站服务器（注入过程不修改原始请求的其他内容）。
  给源站服务器传递WAF层面的关键上下文（例如请求来源IP、会话ID），可解决源站无法直接获取真实客户端信息、WAF转发轨迹的问题。
  
- **响应头字段转发**
  当源站返回响应时，WAF同样先接收响应，注入 "响应头字段" 后，再转发给客户端，便于您区分不同来源的请求，更好的统计分析网站运营情况。
  给客户端返回业务自定义标识（例如服务节点、防护标识），便于前端排查问题、统计不同渠道访问效果。
  
 
#### 典型应用场景
- 电商平台需统计 "通过 WAF 防护的访问量"，在请求头添加"X-WAF-Access: yes"，源站通过该字段筛选 WAF 渠道流量，独立统计转化效果。
- 企业API服务需记录请求的真实客户端IP（WAF转发后源站默认获取WAF节点IP），在请求头配置"X-Real-IP: $remote_addr"（$remote_addr 为客户端真实IP变量），源站直接读取该字段即可获取真实IP。
- SaaS 服务商需区分不同租户的请求，在请求头添加"X-Tenant-ID: $tenant_id"（$tenant_id 为华为云租户 ID 变量），源站通过该字段隔离租户数据。
- 前端排查 "访问延迟" 问题，在响应头添加"X-WAF-Request-ID: $request_id"，通过请求ID关联WAF日志与源站日志，快速定位延迟节点。
 
#### 约束条件
| 功能       | 约束说明                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|
| 接入方式限制   | - **云模式-CNAME接入** /**独享模式接入**：支持该功能。  - **云模式-ELB接入**：不支持。ELB接入为旁路检测架构，真实报文全程在ELB与源站之间传输，WAF只有只读镜像副本，无权限修改原始流量，无法插入、 删除头部。                                                                                                 |
| 地域限制     | 以控制台实际为准。                                                                                                                                                                                                                                                                                                                                                                 |
| Key值限制   | Key值会附加在原有头字段之后，不会覆盖Nginx原生字段。用户可以任意配置，但是不能跟Nginx原生字段重复。                                                                                                                                                                                                                                                                                                                  |
| Value值限制 | Value值可以自定义一个字符串，也可以配置为以$开头的变量。以$开头的变量是WAF在请求处理过程中动态获取的实时数据（例如请求时间、会话信息），配置后会自动替换为实际值，无需手动填充。 以$开头的变量仅支持配置如下字段：$time_local、$request_id、$connection_requests、$tenant_id、$project_id、$remote_addr、$remote_port、$scheme、$request_method、$http_host、$origin_uri、$request_length、$ssl_server_name、$ssl_protocol、$ssl_curves$ssl_session_reused。 |
| 其他       | 不支持请求头和响应头带"."转发。                                                                                                                                                                                                                                                                                                                                                         |
   
#### 前提条件
已[添加防护网站](https://support.huaweicloud.com/usermanual-waf/waf_01_1108.html)且部署模式为"云模式-CNAME接入"或"独享模式"。
#### 配置请求头和响应头字段转发
您可以参考[配置方法]、[Value值配置建议]、[验证方法]，配置请求头和响应头字段转发。
 #### 配置方法
1. [登录Web应用防火墙控制台](https://console.huaweicloud.com/waf/?locale=zh-cn)。
2. 在控制台左上角，单击![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000002304713360.png)图标，选择区域或项目。
3. (可选) 如果您已开通企业项目，在左侧导航栏上方单击"按企业项目筛选"下拉框，选择您所在的企业项目。完成后，页面将为您展示该企业项目下的相关数据。
4. 在左侧导航栏，选择"资产管理 \> 防护对象"。
5. 在"防护对象"页面，单击目标防护域名。
6. 在"高级配置"区域，单击"请求头字段转发"或"响应头字段转发"后的"修改"。
7. 在弹出的对话框中，输入Key/Value值，并单击"添加"，可添加多个字段。 
   图1请求头字段转发   
   ![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000002255527533.png "点击放大")
   图2响应头字段转发   
   ![](https://support.huaweicloud.com/usermanual-waf/zh-cn_image_0000002255607553.png "点击放大")
   
   
8. 确认字段添加完成后，单击"确定"。
 
 #### Value值配置建议
| Value值               | 描述                                         | 应用场景                           |
|:---|:---|:---|
| $time_local          | 服务器本地访问时间。                                 | 访问日志记录请求时间，用于按时间筛选/统计请求。       |
| $request_id          | 请求唯一ID。                                    | 前端排查 "访问延迟" 问题。                |
| $connection_requests | 单连接请求数。                                    | 监控连接复用情况                       |
| $tenant_id           | 华为云租户ID变量。                                 | 服务商需区分不同租户的请求。                 |
| $project_id          | 业务项目ID。                                    | 多项目共用网关，按项目维度统计异常，精准定位受影响业务。   |
| $remote_addr         | 客户端四层网络地址。                                 | IP限流、访问控制（黑白名单）、地域统计。          |
| $remote_port         | 客户端四层网络端口。                                 | 辅助溯源：同一 IP大量不同端口发起请求，判定批量扫描    |
| $scheme              | 请求协议（HTTP或HTTPS）。                          | 区分明文/加密访问。                     |
| $request_method      | 请求方法。                                      | 方法级访问控制、RESTful路由分发、限流策略。      |
| $http_host           | 请求Host头。                                   | 区分多域名站点。                       |
| $origin_uri          | 原始请求URL。                                   | 记录rewrite前的原始路径，用于调试重写规则和访问统计。 |
| $request_length      | 请求总长度。                                     | 限制请求体大小、检测超大请求攻击。              |
| $ssl_server_name     | TLS SNI（Server Name Indication）中客户端请求的主机名。 | 无Host头的加密恶意连接场景。               |
| $ssl_protocol        | SSL/TLS版本协议。                               | 安全合规审计，强制最低协议版本检测。             |
| $ssl_curves          | TLS握手使用的椭圆曲线算法。                            | 安全风险排查，识别弱加密曲线的恶意连接。           |
| $ssl_session_reused  | SSL会话复用标识。                                 | 评估TLS会话复用率，优化握手性能。             |
   
 #### 验证方法
- 在**源站服务器** ，验证请求头转发字段：
  以源站为Linux服务器为例，执行命令**curl -I -H "Host: 目标域名" 源站IP**，查看返回的Request Headers是否包含配置的字段。
  
- 在**客户端** ，验证响应头转发字段：
  打开浏览器开发者工具（F12），在"网络"页签， 访问目标域名，发送任意请求后，在"标头"页签，查看Response Headers是否包含配置的字段。
  
 
