源站换成独立 IP 后,CDN 回源配置填了 IP 又在 Host 头里保留了 CDN 自己的域名,源站 Nginx 匹配不到 server_name 落到默认站点,回源日志里全是 404,用户看到的是默认欢迎页。

原因不止一个,得分开看。回源 Host 没改成站点域名,Nginx 走了 default_server。少数情况下是默认站点的 root 指向空目录,任何路径都是 404。

另外,CDN 缓存了这批 404,修好 Host 后仍有节点返回旧结果。

直连源站 IP 指定 Host 复现

curl -sI -H "Host: www.example.com" http://203.0.113.10/about/ | head -3

随后在回源配置里固定 Host

proxy_set_header Host www.example.com;

末了确认默认站点没有被误用

nginx -T | grep -n "default_server" -A3

我习惯把每一步的执行时间和结果记在一边,后面复盘省事。

改之前我把相关日志按时间截了一段存着,事后对时间线用得上。

改完先别撤,确认这几项。回源日志里 404 消失,边缘返回 200 且内容长度与源站一致,purge 之后各节点都不再出现欢迎页。

换源站 IP 时最容易漏掉 Host,回源测试一定要带 Host 头直连 IP,别只看 CDN 那边的状态码。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189