一、功能概述
「回源标记」是百度云 Web 应用防火墙(WAF)自定义规则中的一种处置动作。当请求匹配设定的条件时,WAF 不会拦截请求,而是在转发到源站时,自动为该请求 追加自定义 HTTP Header。源站可根据该 Header 的值进行相应的业务逻辑处理。
核心思路:WAF 负责识别 → Header 负责传递 → 源站负责决策
二、使用场景
场景 1:灰度发布 / AB 测试
将特定 IP 段(如公司内部 IP、测试团队 IP)的请求标记为 X-Canary: true,源站读取后分流到灰度环境。
| 配置项 | 值 |
|---|---|
| 规则名称 | 灰度流量标记 |
| 匹配条件 | IP 属于 10.0.0.0/8, 172.16.0.0/12 |
| 处置动作 | 回源标记 |
| Header 名称 | X-Canary |
| Header 内容 | true |
场景 2:恶意爬虫”静默降级”
识别已知爬虫 IP 但不直接拦截,标记为 X-Bot-Score: high,源站返回降级内容(如低清图片、延迟加载),让爬虫抓取到价值较低的数据,同时不影响正常用户体验。
| 配置项 | 值 |
|---|---|
| 规则名称 | 爬虫降级标记 |
| 匹配条件 | IP 属于 已收集的爬虫IP列表 |
| 处置动作 | 回源标记 |
| Header 名称 | X-Bot-Score |
| Header 内容 | high |
场景 3:VIP 用户 / 白名单识别
将高价值客户 IP 标记后,源站提供优先级更高的服务(如限流豁免、专用通道)。
| 配置项 | 值 |
|---|---|
| 规则名称 | VIP 客户标记 |
| 匹配条件 | IP 属于 VIP客户IP段 |
| 处置动作 | 回源标记 |
| Header 名称 | X-User-Level |
| Header 内容 | vip |
场景 4:地理位置标记
结合匹配条件中的地区字段,为不同地域流量添加标记,源站据此返回本地化内容。
| 配置项 | 值 |
|---|---|
| 规则名称 | 海外流量标记 |
| 匹配条件 | 地区 属于 海外 |
| 处置动作 | 回源标记 |
| Header 名称 | X-Geo-Region |
| Header 内容 | overseas |
场景 5:安全审计标记(先观察后处置)
对可疑流量仅添加标记而不拦截,源站记录日志并分析,确认恶意后再升级为「拦截」。
| 配置项 | 值 |
|---|---|
| 规则名称 | 可疑流量审计标记 |
| 匹配条件 | URI 包含 /api/v2/admin 且 IP 不属于 内网IP段 |
| 处置动作 | 回源标记 |
| Header 名称 | X-Security-Flag |
| Header 内容 | suspicious |
三、操作教程
第一步:进入 WAF 控制台
- 登录 百度智能云控制台
- 在左侧导航栏找到 安全 → Web 应用防火墙 WAF
- 选择需要配置的防护域名,进入规则管理页面
第二步:添加自定义规则
- 点击 自定义规则 标签页
- 点击 添加规则 按钮,弹出配置弹窗
第三步:填写基本信息
- 规则名称:输入有意义的名称,如
灰度流量标记(1~40 字符,支持中英文、数字、/、_) - 接入类型:根据你的 WAF 接入方式选择
SaaSWAF:通过 CNAME 接入的 SaaS 模式
第四步:配置匹配条件
- 选择匹配字段:点击下拉框,可选字段包括:
IP— 客户端 IP 地址URI— 请求路径Method— 请求方法(GET/POST 等)Header— 请求头Cookie— Cookie 值地区— 访问来源地区- 等更多字段
- 选择逻辑运算符:字段不同,可选运算符不同,常见有:
属于/不属于— 用于 IP、地区等集合匹配包含/不包含— 用于字符串模糊匹配等于/不等于— 精确匹配正则匹配— 高级模式匹配
- 填写匹配值:在文本框中输入匹配内容
- IP 地址示例:
1.1.1.1/24, 2.2.2.2(逗号分隔或回车确认,最多 200 个) - 暂不支持正则表达式
- 添加多条件(可选):点击 + 添加「且」条件,最多叠加 5 个条件,所有条件 同时满足 才会触发规则
第五步:选择生效模式
| 模式 | 说明 | 适用场景 |
|---|---|---|
| 永久生效 | 规则始终有效 | 长期策略 |
| 按时间段生效 | 指定起止时间 | 临时活动、应急响应 |
| 按周期生效 | 设置周期性时间窗口 | 仅工作时间生效、周末放行等 |
第六步:设置处置动作为「回源标记」
- 在 处置动作 中选择 回源标记
- 展开后填写两个子字段:
- Header 名称:自定义的 HTTP 头名称,如
X-Canary、X-Bot-Score - Header 内容:Header 的值,如
true、high、vip
⚠️ 注意:Header 名称建议使用
X-前缀,这是自定义头的约定规范,避免与标准 HTTP 头冲突。
第七步:选择防护站点
在底部 防护站点 区域,勾选需要该规则生效的域名/站点。
第八步:保存规则
确认无误后点击 确定,规则即刻生效。
四、源站端配合配置
WAF 端配置完成后,源站需要读取该 Header 进行业务处理。以下为常见框架的代码示例:
Nginx
location / {
# 读取 WAF 传递的标记
if ($http_x_canary = "true") {
proxy_pass http://canary_backend;
break;
}
proxy_pass http://main_backend;
}
Java (Spring Boot)
@GetMapping("/api/data")
public ResponseEntity<?> getData(
@RequestHeader(value = "X-Canary", required = false) String canaryFlag) {
if ("true".equals(canaryFlag)) {
// 灰度逻辑:返回实验性数据
return ResponseEntity.ok(canaryService.getData());
}
return ResponseEntity.ok(mainService.getData());
}
Node.js (Express)
app.get('/api/data', (req, res) => {
const canaryFlag = req.headers['x-canary'];
if (canaryFlag === 'true') {
return res.json(canaryService.getData());
}
res.json(mainService.getData());
});
Python (Flask)
@app.route('/api/data')
def get_data():
canary_flag = request.headers.get('X-Canary')
if canary_flag == 'true':
return jsonify(canary_service.get_data())
return jsonify(main_service.get_data())
五、验证与调试
1. 检查 Header 是否正确传递
使用 curl 从匹配的 IP 发起请求,检查响应或源站日志:
# 在源站侧抓包查看
tcpdump -A -i eth0 'tcp port 80' | grep -i "X-Canary"
2. 查看规则命中情况
在 WAF 控制台 → 自定义规则列表,查看该规则的 命中次数/统计,确认规则是否按预期触发。
3. 先用「观察」模式测试
首次部署建议先将处置动作设为 观察,确认匹配条件和命中情况无误后,再改为 回源标记。
六、常见问题
Q1:回源标记和拦截有什么区别?
| 对比项 | 回源标记 | 拦截 |
|---|---|---|
| 请求是否到达源站 | ✅ 是(带额外 Header) | ❌ 否 |
| 用户体验影响 | 无感知 | 返回拦截页面 |
| 源站是否需要改造 | 需要(读取 Header) | 不需要 |
| 适用场景 | 灰度、审计、降级 | 直接阻断攻击 |
Q2:可以同时设置多个回源标记规则吗?
可以。不同规则可设置不同的匹配条件和不同的 Header 名称/值。当请求同时匹配多条规则时,WAF 会将所有匹配的 Header 都追加到回源请求中。
Q3:Header 名称有限制吗?
- 建议使用
X-前缀 - 不要使用标准 HTTP 头名称(如
Host、Content-Type),以免覆盖原有值 - 名称应简洁明确,方便源站识别
Q4:匹配条件的「且」和「或」如何理解?
- 同一规则内的多个条件为 且(AND) 关系,必须全部满足
- 不同规则之间为 或(OR) 关系,命中任意一条即触发
- 如需更复杂的逻辑,可以拆分为多条规则
七、最佳实践
- 命名规范:规则名称采用
场景_说明格式,如灰度_内部IP标记,便于后期管理 - 先观察后标记:新建规则先用「观察」模式验证命中情况,确认无误再改为「回源标记」
- Header 值标准化:统一定义枚举值(如
true/false、high/medium/low),避免源站解析混乱 - 定期审计:定期检查规则的命中统计,清理长期无命中的规则
- 文档记录:每个回源标记 Header 的含义、取值、来源规则应记录在团队 Wiki 中,方便协作


