配置请求头和响应头字段转发
云模式-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日志与源站日志,快速定位延迟节点。
约束条件
| 功能 | 约束说明 |
|---|---|
| 接入方式限制 |
|
| 地域限制 | 以控制台实际为准。 |
| 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。 |
| 其他 | 不支持请求头和响应头带“.”转发。 |
前提条件
已添加防护网站且部署模式为“云模式-CNAME接入”或“独享模式”。
配置请求头和响应头字段转发
您可以参考配置方法、Value值配置建议、验证方法,配置请求头和响应头字段转发。
配置方法
- 登录Web应用防火墙控制台。
- 在控制台左上角,单击
图标,选择区域或项目。 - (可选) 如果您已开通企业项目,在左侧导航栏上方单击“按企业项目筛选”下拉框,选择您所在的企业项目。完成后,页面将为您展示该企业项目下的相关数据。
- 在左侧导航栏,选择。
- 在“防护对象”页面,单击目标防护域名。
- 在“高级配置”区域,单击“请求头字段转发”或“响应头字段转发”后的“修改”。
- 在弹出的对话框中,输入Key/Value值,并单击“添加”,可添加多个字段。 图1 请求头字段转发
图2 响应头字段转发
- 确认字段添加完成后,单击“确定”。
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会话复用率,优化握手性能。 |