
一、先确认现象
排查第一步不是急着改配置,而是搞清楚”到底哪里不对”:
- 错误码是什么?(502/504/403/超时/证书错误)
- 是所有用户都打不开,还是部分地区/个别用户?
- 是所有页面都不行,还是只有某个页面?
- 什么时候开始的?之前做过什么变更?
二、五步排查流程
第一步:查 DNS 解析
# 确认域名解析是否指向 WAF
nslookup www.你的域名
dig www.你的域名 +short
# 期望:返回 WAF 节点 IP
# 若仍返回源站 IP → 解析未生效
# → 等待 TTL 过期,或检查 DNS 配置
# 检查是否有多个解析记录冲突
dig www.你的域名 ANY
第二步:查 WAF 控制台
检查项:
□ WAF 服务状态是否正常(有无故障公告)
□ 域名是否处于"正常防护"状态
□ 是否有大量拦截记录(可能误拦)
□ 源站配置是否正确(IP/端口/协议)
□ 证书是否过期
□ 套餐流量是否超限
第三步:确认源站可访问
# 直接从本地访问源站 IP,绕过 WAF
test -n "$(curl -sk -o /dev/null -w "%{http_code}" \
--resolve www.你的域名:443:源站IP https://www.你的域名/)" \
&& echo "源站可访问"
# 或更直接:
curl -Isk --resolve www.你的域名:443:源站IP https://www.你的域名/
# 结果判断:
# 返回 200 → 源站正常,问题在 WAF 或回源配置
# 返回 403 → 源站白名单拦截了回源(要把 WAF 回源 IP 加白)
# 连接超时 → 源站防火墙拦截或服务未启动
第四步:检查源站服务
# SSH 登录源站后
# 1. 检查 Nginx 是否运行
systemctl status nginx
ps aux | grep nginx
# 2. 检查端口监听
netstat -tlnp | grep -E ":80|:443"
# 3. 本地访问测试
curl -I http://127.0.0.1/
# 4. 查看错误日志
tail -50 /www/wwwlogs/nginx_error.log
# 5. 检查防火墙规则
iptables -L -n | head -30
第五步:检查回源配置
| 配置项 | 常见错误 | 正确做法 |
|---|---|---|
| 回源协议 | 源站只支持 HTTP,WAF 配了 HTTPS | 改成 HTTP 或给源站配证书 |
| 回源端口 | 端口填错(如填 80 但源站听 8080) | 核对源站实际端口 |
| 回源 Host | Host 头不对,源站找不到站点 | 设为与源站 server_name 一致 |
| 源站白名单 | 源站拒绝了 WAF 回源 | 把 WAF 回源 IP 加入源站白名单 |
| 回源 IP | 源站 IP 填错 | 核对源站真实 IP |
三、常见错误码对照
502 Bad Gateway
最典型的”源站不可达”。按顺序检查:
- 源站服务是否运行(nginx 进程)
- 回源端口是否正确
- 源站防火墙是否放行 WAF 回源 IP
- 回源 Host 是否正确
504 Gateway Timeout
回源超时,说明源站响应太慢或卡住。检查源站 CPU、内存、数据库连接,以及 WAF 的回源超时设置是否过短。
403 Forbidden
两种可能:一是被 WAF 规则拦截(查拦截日志);二是源站自己的访问控制拦了(查源站配置)。
重定向次数过多
通常是”WAF 强制 HTTPS + 源站也强制 HTTPS”双重跳转造成死循环。解决:关闭源站的强制跳转,统一由 WAF 处理。
SSL 证书错误
检查 WAF 侧证书是否正确上传、是否过期、是否与域名匹配。
四、快速定位脚本
#!/bin/bash
# 接入 WAF 后的快速诊断脚本
DOMAIN="www.你的域名"
ORIGIN="115.159.82.67"
echo "=== 1. DNS 解析 ==="
dig $DOMAIN +short
echo "=== 2. 经 WAF 访问 ==="
curl -sk -o /dev/null -w "状态码:%{http_code} 耗时:%{time_total}s\n" \
https://$DOMAIN/
echo "=== 3. 直连源站 ==="
curl -sk -o /dev/null -w "状态码:%{http_code} 耗时:%{time_total}s\n" \
--resolve $DOMAIN:443:$ORIGIN https://$DOMAIN/
echo "=== 4. 响应头 ==="
curl -sIk https://$DOMAIN/ | grep -iE "server|via|x-cache"
echo "=== 5. 源站端口 ==="
nc -zv -w3 $ORIGIN 443 2>&1
五、小结
排查 WAF 接入后的故障,关键是”分层定位”:DNS 层、WAF 层、回源层、源站层逐层排除。502 多半是源站不可达或白名单问题,504 是源站慢,403 是拦截,重定向循环是 HTTPS 配置冲突。用上面的诊断脚本可以几秒内跑完基本检查。
