现场是这样的。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 一错,整站内容都会变成别人的。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189