记录一下那天晚上的排查过程。前端构建给 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 的节点会集体破图。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
