
一、为什么不能直接回源到单台机器
如果你的业务有多台后端服务器,WAF 的源站配置直接填某一台的 IP,会带来三个问题:
- 这台机器被打挂 → 整个网站不可用
- 流量全部压在一台机器上 → 资源浪费
- 扩容或下线机器 → 每次都要改 WAF 配置
正确做法是让 WAF 回源到负载均衡,由负载均衡统一管理后端。
二、典型架构
用户
↓
DNS 解析(CNAME 指向 WAF)
↓
┌─────────────┐
│ WAF 防护层 │ ← 安全检测、CC 防护、IP 情报
└─────────────┘
↓ 回源
┌─────────────┐
│ 负载均衡层 │ ← SLB / Nginx / LVS
└─────────────┘
↓ ↓ ↓
后端1 后端2 后端3 ← 实际业务处理
三、三种回源模式
3.1 回源到负载均衡地址(推荐)
WAF 源站只填一个地址——你的负载均衡 IP 或域名。负载均衡负责把请求分发给后端。
- 优点:WAF 配置稳定,后端扩缩容无需改 WAF
- 优点:负载均衡可做健康检查,自动摘除故障节点
- 适用:所有多机集群场景
3.2 回源到多个 IP 轮询
没有独立负载均衡时,可以在 WAF 里配置多个源站 IP,WAF 自己做轮询。
控制台 → 源站配置
源站列表:
115.159.82.67:443 权重 1
115.159.82.68:443 权重 1
115.159.82.69:443 权重 1
负载均衡方式:轮询 / 加权轮询 / 最少连接
- 优点:无需额外部署负载均衡组件
- 缺点:健康检查能力较弱,故障摘除可能不及时
- 适用:2-3 台服务器的小集群
3.3 回源到内部域名
源站填一个内部域名(如 origin.internal.com),由内部 DNS 解析到后端集群。适合后端 IP 频繁变化的容器化环境。
四、真实 IP 透传(关键)
多层代理后,后端拿到的 remote_addr 会是负载均衡或 WAF 的 IP,业务代码要拿访客真实 IP 就需要读取 XFF 头。
4.1 Nginx 配置 real_ip 模块
# 在 http 块中配置信任的代理层 IP
set_real_ip_from 182.61.129.0/24; # WAF 回源网段
set_real_ip_from 10.0.0.0/8; # 内网负载均衡段
real_ip_header X-Forwarded-For;
real_ip_recursive on;
# 此后 $remote_addr 即为访客真实 IP
log_format main '$remote_addr - $http_x_forwarded_for ...';
4.2 宝塔面板操作
- 软件商店 → 安装「Nginx」后进入配置修改
- 在 http 块内加入上面三行 set_real_ip_from / real_ip_header / real_ip_recursive
- 保存后重载 Nginx:`nginx -t && nginx -s reload`
- 验证:访问网站后看日志,$remote_addr 应为真实访客 IP
五、SSL 在两个层级的处理
| 方案 | 做法 | 适用 |
|---|---|---|
| WAF 卸载 SSL | WAF 解密,回源 HTTP | 源站在内网,最简单 |
| WAF + LB 都持证书 | 两段 HTTPS | 合规要求高 |
| WAF 卸载,LB 再加密 | 回源 HTTPS 到 LB | 内网也走加密 |
六、小结
WAF 和负载均衡是上下层关系:WAF 负责安全,负载均衡负责分发。核心配置原则是”WAF 只认负载均衡,不认具体后端”,配合 real_ip 透传真实访客地址。这样后端怎么扩、怎么换,都不需要动 WAF。
