现场是这样的。CDN 回源 Host 配成了默认站点,蜘蛛请求新域名时拿到的是默认站的 404 页,状态码是 200,内容完全无关。
中间走过弯路,把「404 页返回 200,蜘蛛把无关内容当成正常页」当成主因,改完现象没变。
这类报错背后常见的原因有几处,逐个排除就行。回源 Host 没跟随用户请求的域名,固定写成了一个值;源站没配 server_name,落到默认 server 块;CDN 缓存了这份 200 的错误页。
动手时先对比直连源站和走 CDN 的响应
curl -s -H 'Host: www.example.com' http://203.0.113.10/post/1024 | head -5
回源 Host 改成透传
proxy_set_header Host $host;
默认 server 直接断开
server { listen 80 default_server; return 444; }
刷新错误页缓存
curl -X PURGE https://www.example.com/post/1024
命令输出我都留了记录,免得改完记不清原来的值。
改之前先确认了最近有没有人动过配置,避免白查一遍。
恢复的判定其实很直接。走 CDN 和直连源站返回的内容一致,默认站不再响应未知域名。
404 配 200 是最容易骗过监控的写法,回源 Host 一错,整站内容都会变成别人的。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
