记录一下那天晚上的排查过程。前端构建给 CSS 和 JS 加了 contenthash,改版后旧文件被清理。CDN 缓存的 HTML 仍引用旧文件名,蜘蛛渲染页面时样式全丢,抓取诊断里出现多条资源 404。

刚开始盯着「缓存键没有按版本区分,边缘节点各自持有不同副本」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。HTML 在 CDN 上的缓存时间比静态资源长,两边版本错位。少数情况下是构建时删掉了上一版带哈希的文件,旧引用直接 404。

另外,蜘蛛渲染时资源缺失,页面结构判断跟着出错。

上来先看缓存 HTML 引用了哪个文件

curl -s https://www.example.com/ | grep -o 'href="[^"]*\.css"' | head

然后确认该文件是否存在

curl -sI https://www.example.com/assets/index-8f3a2c.css | head -3

接着清掉 HTML 缓存并回源

curl -X PURGE https://www.example.com/

保留上一版资源一个周期

ls -lt /var/www/html/assets/*.css | head -5

改完先别撤,确认这几项。HTML 与静态资源版本对齐后,资源 404 归零,抓取诊断里的渲染页面恢复正常样式。

补一句。带哈希的文件不要发版即删,至少留一个缓存周期,否则边缘还在用旧 HTML 的节点会集体破图。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189