You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud Run缓存未失效 站点更新后仍加载旧版本如何解决

问题根因

这根本不是DNS缓存的问题,刷公共DNS缓存完全是找错了方向——你遇到的是HTTP缓存层异常。
从响应头Date停留在6月20日、只有强制刷新/从未访问过的新浏览器能拿到新内容、普通刷新就回退旧版的特征判断,旧版本站点内容被Google边缘节点或者你服务自身的缓存策略长期缓存了,尤其是单页应用的入口index.html没有触发回源校验,才会导致用户一直拿到旧版本。

分步解决操作
  • 先检查Cloud Run的流量分配是否正确
    打开Cloud Run控制台,找到对应服务的版本管理页,确认6月21日部署的React新版本Revision是不是分配了100%的流量。如果有旧版本残留流量占比,手动把所有流量切到新版本,先排除部署时流量切错的低级问题。
  • 检查是否意外开启了边缘缓存
    如果你是通过负载均衡把流量转发到Cloud Run、手动开了Cloud CDN,旧版本内容会被CDN边缘节点缓存住,不会自动回源拉新版本:
    • 到负载均衡后端配置里,找到对应Cloud Run后端的缓存规则,把缓存模式改成「遵循原站缓存控制头」
    • 单独给/、/index.html路径配置缓存TTL为0,强制访问这两个路径时必须回源校验
    • 提交配置后等2-5分钟让边缘节点同步规则,再测试访问
  • 修正前端静态资源的缓存响应头
    这是单页应用部署最容易踩的缓存坑,不管你是用Nginx、Node服务还是其他静态服务器托管React打包产物,必须按规则配置响应头:
    对入口文件index.html,配置不缓存策略,对应响应头如下:
    Cache-Control: no-cache, no-store, must-revalidate
    Pragma: no-cache
    Expires: 0
    
    对打包后带内容hash的JS、CSS、图片等静态资源(比如main.9a7b2c.js这类文件名带随机串的文件),可以配置长期缓存,对应响应头如下:
    Cache-Control: public, max-age=31536000, immutable
    
    这套配置是React/Vue这类单页应用的标准部署方案:入口文件每次访问都回源拿最新的,带hash的资源因为文件名会随内容变化,就算缓存一年也不会和新版本冲突,从根源上避免新旧版本串台的问题。
  • 快速验证方法
    访问站点时在URL末尾加一个随机查询参数,比如/?v=fixcache0621,如果加了参数之后能正常加载新版本,就100%确认是缓存配置问题,等前面的规则生效后,所有普通用户访问都会自动拿到最新内容,完全不需要让用户手动清缓存或者强制刷新。

补充:如果你是直接用Cloud Run默认分配的xxx.run.app域名访问、没有自己配负载均衡和CDN,那90%的问题是你服务自身返回的缓存头配错了,把index.html设置成了可长期缓存,导致浏览器和Google默认的边缘缓存层一直存着旧版本的入口文件。

内容的提问来源于stack exchange,提问作者Matheus Alexandre de Sena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 09:54:27