站点接入云 WAF,回源时没带 SNI,源站 Nginx 上有 20 多个虚拟主机,直接返回 421 Misdirected Request。WAF 把这个 421 原样透给蜘蛛,抓取统计里全是 421,收录一周内归零。
一开始怀疑是「证书绑定在默认 server 块,与请求域名不匹配」,查了一圈,方向不对。
把日志和配置对完,能解释这个现象的基本就这几处。回源配置里 SNI 留空,源站无法判断用哪张证书。少数情况下是源站开了 HTTP/2,421 在复用连接时更容易出现。
少数情况下是WAF 把源站错误码原样透传,没有做健康检查。
直接对源站发请求复现 421
curl -s -o /dev/null -w '%{http_code}\n' -H 'Host: www.example.com' https://源站IP/
带上 SNI 再试一次
curl -s -o /dev/null -w '%{http_code}\n' --resolve www.example.com:443:源站IP https://www.example.com/
接着确认 WAF 回源配置里的 SNI 与 Host
curl -sI https://www.example.com/ | head -3
源站默认 server 改成返回 444 而不是 421
curl -s -o /dev/null -w '%{http_code}\n' https://www.example.com/
中途换过一次思路,把范围缩到最小的那一层,反而快了。
恢复的判定其实很直接。回源请求带上 SNI,源站返回 200,WAF 侧的 421 计数归零,抓取统计恢复。
提醒一点。421 是连接复用引发的问题,源站和 CDN 都要配好 Host 与 SNI,别只查一侧。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
