数力科技Digital Force
← 全部文章

改了网站但线上没变:一个排查顺序

你在后台改了一段文字,保存,打开网站——还是旧的。再改一次,还是旧的。开始怀疑是不是没保存上。

这件事几乎每个管过网站的人都遇到过,而且很容易在上面浪费半小时。原因通常不是你没改对,而是你和服务器之间隔着好几层缓存,每一层都可能存着旧版本

下面按从近到远的顺序排查。这个顺序很重要——从最近的一层开始查,能最快排除。

第零层:你确实改的是同一个地方吗

先排除这个,因为它比想象中常见。

双语网站改了中文没改英文、改的是草稿没发布、改的是另一个相似的页面、后台开了两个标签页覆盖了自己的修改。这些听起来低级,但在页面多的网站上很容易发生。

确认方法:在你改的那段文字里临时加一串独特的字符,比如 ZZTEST123,保存。后面每一步都搜这个字符串,能立刻分辨。查完删掉。

第一层:浏览器缓存

最近的一层,也是最常见的元凶。

浏览器会把页面和资源存在本地,下次访问直接用本地的。样式和脚本尤其容易被存很久。

怎么排除:用无痕窗口打开。无痕窗口不用现有缓存,如果这里是新的,那问题就在你的浏览器,其他访客看到的是正常的。

硬刷新(Ctrl+Shift+R 或 Cmd+Shift+R)也可以,但无痕更彻底,而且不影响你自己的浏览习惯。

如果无痕里也是旧的,继续往下。

第二层:CDN 边缘缓存

如果你用了 Cloudflare 之类的 CDN,它会在离访客近的节点存一份。

怎么确认:在网址后面加一个随机参数,比如 ?x=12345。带参数的地址通常不在缓存里,会直接回源。如果加了参数就是新内容,那就锁定是 CDN 缓存。

这个方法很好用,因为它同时排除了浏览器缓存(新地址浏览器也没存过)。

怎么解决:在 CDN 后台清缓存。但更该做的是想一下为什么它没自动失效——正常情况下改内容应该触发清除。如果每次都要手动清,说明自动化那一环没做,迟早会忘。

第三层:网站自己的页面缓存

很多系统会把生成好的页面存成文件,下次直接发文件,不再走一遍程序。WordPress 的各种缓存插件都是这个原理。

怎么确认:看响应头里有没有缓存插件加的标记(不同插件名字不同),或者直接去后台点一下”清除缓存”,然后再看。

这一层最容易出的问题是”清除规则漏了”。比如你新加了一个模板文件,但缓存的失效清单里没有它,于是改模板不会触发清缓存。表现就是”改了没反应”,而且怎么改都没反应。

我们自己犯过这个错:新增的模板没进监视列表,部署完线上纹丝不动,排查了一阵才想到。这类问题的特征是它不报错,一切看起来正常,只是内容不更新。

第四层:服务器端的对象缓存

比页面缓存更深一层,缓存的是数据库查询结果。改了内容但查询结果还是旧的,页面重新生成也是旧数据。

这一层不常见,多数中小网站没配。如果前三层都排除了还是旧的,问一下你的技术人员有没有开这个。

第五层:静态站没重新发布

如果你的网站是静态生成的——页面提前生成好、访客拿到的是文件——那么在后台改内容不会自动更新线上,必须重新生成并发布。

这不是 bug,是这种架构的固有特性。但如果没人跟你说清楚,你会以为是缓存问题,怎么清都没用。

我们自己的站就是这样,所以流程被固定成两步:改完内容,跑一条发布命令。这一步写在文档里,因为忘了这一步的表现和缓存问题一模一样。

一个附加情况:CDN 缓存了 404

这个值得单独说,因为它的表现很反直觉。

场景是:一张图片还没上传,有人(或者爬虫)访问了那个地址一次,CDN 记住了”这里是 404″。之后你把图片传上去了,访客看到的还是空白——因为 CDN 还在发那个记住的 404。

你会反复检查图片是不是传对了、路径是不是写错了,而这两样都没问题。

我们踩过两次,第二次才反应快。识别方法还是加随机参数:如果 图片地址?x=1 能正常显示,而原地址是 404,那就是缓存问题,清一下就好。

把这个顺序记下来

无痕窗口 → 加随机参数 → 清网站缓存 → 问对象缓存 → 确认要不要重新发布。

五步,每一步都是几十秒的事,走完基本能定位。关键是按顺序走,不要跳。大部分人在这上面浪费时间,是因为一上来就去清 CDN 缓存,而问题其实在自己浏览器里。

另外一条经验:如果你发现自己经常要手动清缓存,那是个信号。正常情况下内容变更应该自动触发失效,需要人记得的环节迟早会被忘掉。这件事值得让技术人员修一次,而不是每次手动处理。

我们交付的项目里,缓存失效是跟着内容变更自动跑的,不需要客户记得清。如果你现在的站要靠手动清,可以问问对方为什么。

Get started

开始一个项目先聊三十分钟

先聊聊你的想法,我们给你一份免费的方案建议。

AI 客服右下角气泡
所在地Auckland, NZ