跳到主要内容
Jason Finance
AI 创业

WordPress 改了却看不到:Cloudways 的 Varnish 和 WP Rocket 两层缓存

WordPress 改了访客却看不到?Cloudways Varnish 和 WP Rocket 是两层缓存,只清一层不够。依官方文档整理各层怎么清、怎么从响应头判断是哪一层给的页面,附部署后检查清单。

本文目录
  1. 1.2026 年 10 月 10 日:清了 WP Rocket,访客还是看到旧版
  2. 2.一个页面请求会经过哪几层缓存
  3. 3.WP Rocket 缓存了什么、怎么清
  4. 3.1WP Rocket 存了什么
  5. 3.2什么时候会自动清
  6. 3.3手动清:后台按钮或 WP-CLI
  7. 4.Cloudways 的 Varnish 是什么、怎么清
  8. 4.1默认开启,不会自己发现内容变了
  9. 4.2在 Cloudways 后台清
  10. 4.3WP Rocket 的 Varnish 插件,什么情况会清不到
  11. 5.Cloudflare 那一层:默认不缓存 HTML
  12. 6.怎么判断页面是哪一层给的
  13. 6.1先看 cf-cache-status
  14. 6.2再看 age
  15. 6.3WP Rocket 那一层
  16. 7.部署后的清缓存检查清单
  17. 常见问题

2026 年 10 月 10 日,Claude Code 帮我改了 Jason Career 的网站,部署也完成了,访客看到的却还是旧版。Jason Career 是搭在 Cloudways 上的 WordPress,装了 WP Rocket,清掉 WP Rocket 的缓存之后还是没变:Cloudways 主机层的 Varnish 也存着一份旧页面,要另外清。

先说结论:Cloudways Varnish 和 WP Rocket 是两层不同的缓存,只清一层不够。从那天起,Jason Career 每次部署都两层一起清,这条规则也写进了 Claude 的长期记忆。网站前面还有 Cloudflare,它默认不缓存 HTML,但如果开了缓存规则,就是第三层。下面依官方文档整理每一层存了什么、怎么清、怎么从响应头看出页面是哪一层给的,最后附我现在用的检查清单。

本文是我自己网站的运维记录,加上 2026 年 10 月 17 日查阅的 Cloudways、WP Rocket、Cloudflare 官方文档整理。各家的界面、默认值和命令可能改变,操作前请以官方文档为准。

2026 年 10 月 10 日:清了 WP Rocket,访客还是看到旧版

Jason Career 由 Claude Code 运维:它通过 SSH 连到 Cloudways 主机,用 WordPress 的命令行工具 WP-CLI 修改网站(整套做法见《看不懂 SSH 也能维护 WordPress》)。主机、插件和主题的组合,见《WordPress 电商课程网站怎么搭》。

那天的经过很简单:变更做完、WP Rocket 的缓存也清了,访客端还是旧页面。另外清掉 Cloudways 主机层的 Varnish 之后,变更才出现。处理方式有两件:

  1. 之后每次部署,WP Rocket 和 Varnish 两层一起清。
  2. 把这条规则写进 Claude 的长期记忆,下次换一个会话也不会漏掉。

为什么 WP Rocket 没有顺手清掉 Varnish?当时的记录只写了处理方式,没有记下原因。WP Rocket 的官方文档列了两种会清不到 Varnish 的情况,下面“Cloudways 的 Varnish”一节会说明。

一个页面请求会经过哪几层缓存

访客打开 Jason Career 的一篇文章,请求会依次经过下面几层。外层存着页面就直接返回,里面的层不会被问到。

层 在哪里 存什么 谁负责清
Cloudflare 网站前面的 CDN(响应头有 server: cloudflare) 默认是图片、CSS、JS 等静态文件,默认不缓存 HTML Cloudflare 后台或 API
Varnish Cloudways 主机层 整页的响应 Cloudways 后台、API,或 WordPress 插件发出清除请求
WP Rocket WordPress 插件 每个页面存成静态 HTML 文件,加上压缩后的 CSS、JS WP Rocket 后台、WP-CLI,或编辑文章时自动清

Cloudflare 默认不缓存 HTML,出自 Cloudflare 的默认缓存行为文档。Jason Career 实际在 Cloudflare 开了哪些缓存规则,我还没有整理,所以这篇不假设它有或没有缓存 HTML,检查方法放在后面。

WP Rocket 缓存了什么、怎么清

WP Rocket 存了什么

依 WP Rocket 的页面缓存文档(2025 年 4 月 29 日更新),页面缓存默认开启,会把每个页面存成静态 HTML 文件,放在 /cache/wp-rocket/你的域名/ 下面,例如 index-https.html。访客来的时候,主机直接返回这个文件,不用再跑 PHP 和查数据库。

另一篇文档(2026 年 6 月 24 日更新)列出 WP Rocket 的其他缓存位置,例如压缩后的 CSS、JS 放在 /cache/min/。缓存有存活时间,官方说明写的默认值是 10 小时。

什么时候会自动清

WP Rocket 文档(2026 年 6 月 24 日更新)写的是:发布或编辑一篇文章、页面时,会清掉这篇的缓存、首页,以及分类归档等相关页面。

这个时机是“编辑文章”。像改 Code Snippets 里的自定义程序、改全站 CSS 这类不是编辑文章的变更,文档没有说会自动清。Jason Career 的定制内容都放在这类插件里,所以部署后要自己清。

手动清:后台按钮或 WP-CLI

  • 后台:WP Rocket 的“Clear and preload cache”(清除并预加载缓存)。
  • WP-CLI:WP Rocket 有一个 WP-CLI 扩展,官方文档(2025 年 11 月 25 日更新)的安装与清除命令如下:
# 安装 WP Rocket 的 WP-CLI 扩展
wp package install wp-media/wp-rocket-cli:trunk

# 清除整站缓存,不询问确认
wp rocket clean --confirm

# 只清一个网址
wp rocket clean --permalink=<网址>

同一份文档特别写了:这个命令不会清 Varnish 的缓存。用 WP-CLI 部署的人,清完 WP Rocket 还要另外处理 Varnish。

Cloudways 的 Varnish 是什么、怎么清

默认开启,不会自己发现内容变了

Varnish 是挡在网站前面的缓存服务器。Cloudways 官方博客(2025 年 9 月 26 日更新)说 Cloudways 上的 Varnish 默认开启,常见的架构是每个请求都先经过 Varnish。

Cloudways 帮助中心的 Breeze 文档说,没有 Breeze 或类似的插件通知它,Varnish 不会自己发现网站内容变了,会继续给旧内容,直到存活时间(TTL,默认 4 小时)到期,或有人手动清除。Breeze 是 Cloudways 自己的缓存插件;Jason Career 用的是 WP Rocket。

在 Cloudways 后台清

Cloudways 官方博客的步骤(2023 年 11 月 8 日更新):

  1. 登录 Cloudways 平台,进入服务器。
  2. 打开“Manage Services”。
  3. 在 Varnish 那一行点“Purge”。

同一篇也介绍了用 Cloudways API 清 Varnish(POST /service/varnish,action 填 purge),需要先在平台生成 API 密钥。密钥属于机密,不要放进 Git 或贴到对话里。

WP Rocket 的 Varnish 插件,什么情况会清不到

WP Rocket 的 Varnish 文档(2026 年 1 月 14 日更新)说,在 Cloudways 上它会检测主机环境、自动启用 Varnish 插件,清 WP Rocket 缓存时一并清 Varnish。照这样说,清一次就够了。实际上文档另外写了两个例外:

情况 官方文档怎么说
用 WP-CLI 的 wp rocket clean 清 命令文档:不会清 Varnish
网站前面有 Cloudflare 这类代理 代理文档(2023 年 8 月 14 日更新):代理可能让 Varnish 清不掉;有用 WP Rocket 的 Cloudflare 插件时会自动处理,没有的话要装官方提供的辅助插件

Jason Career 两个条件都有:Claude Code 用 WP-CLI 操作,网站前面也有 Cloudflare。10 月 10 日是哪一个造成的,记录里没有写,我也不在这里猜。不管原因是哪一个,部署后另外清 Varnish 都能避开。

Cloudflare 那一层:默认不缓存 HTML

Cloudflare 文档写明 CDN 默认不缓存 HTML 和 JSON,默认缓存的是 CSS、JS、图片、字体等扩展名。所以只改了文章内容时,问题通常不在 Cloudflare;改了 CSS 或 JS 文件,就可能是 Cloudflare 还存着旧文件。

如果你在 Cloudflare 开了缓存 HTML 的规则,或改的是静态文件,就要清 Cloudflare。依 Cloudflare 的清除缓存文档,免费套餐也能按网址、主机名、标签、前缀清除,或整个域名全部清除,官方建议优先按网址清除。按网址清除的步骤:

  1. 在 Cloudflare 后台进入域名的“Configuration”页面。
  2. 在“Purge Cache”选“Custom Purge”。
  3. “Purge by”选“URL”,贴上要清的网址(路径区分大小写)。
  4. 确认后点“Purge”。

有用 WP Rocket 的 Cloudflare 插件时,WP Rocket 文档(2026 年 6 月 11 日更新)说它通常会和 WP Rocket 的缓存同步清除。但如果用的是 Cloudways 提供的 Cloudflare Enterprise,Cloudways 不提供 API 密钥和 zone ID,WP Rocket 无法同步,要自己清 Cloudflare。

怎么判断页面是哪一层给的

清完缓存,最直接的确认方式是看响应头。步骤:

  1. 用无痕窗口打开要检查的页面,避免登录状态和浏览器自己的缓存干扰。
  2. 打开开发者工具,切到“Network”标签页,刷新。
  3. 点第一个请求(页面本身),看“Response Headers”。

先看 cf-cache-status

Cloudflare 的缓存状态文档列出 cf-cache-status 的意思:

值 意思
HIT 在 Cloudflare 的缓存里找到
MISS 可以缓存,但当时缓存里没有,向源服务器拿
EXPIRED 缓存里有,但已过期,改从源服务器拿
DYNAMIC Cloudflare 判断这个资源不缓存,直接转给源服务器
BYPASS 原本可以缓存,但源服务器的响应不能缓存

是 HIT,表示这次的页面来自 Cloudflare,后面的 Varnish 和 WP Rocket 都没被问到,要清的是 Cloudflare。HTML 页面在默认设置下通常会看到 DYNAMIC,代表请求有送到 Cloudways。另外,Cloudflare 文档也提醒,清除请求返回成功不代表内容真的被移除了,要看清除后 cf-cache-status 不再是 HIT。

再看 age

cf-cache-status 不是 HIT 时,再看 age。WP Rocket 的文档说,在 Varnish 环境下,age 是这份页面在 Varnish 缓存里存了几秒,清掉 Varnish 之后会归零。清完刷新,age 还是很大的数字,就是 Varnish 没清到。

我没有在 Cloudways 官方文档里找到其他可以辨识 Varnish 的响应头名称,所以这里只用 WP Rocket 文档写到的 age 判断。

WP Rocket 那一层

WP Rocket 的页面缓存是主机上的文件。官方文档的检查方式是看 /cache/wp-rocket/你的域名/ 文件夹:清除后对应页面的文件会消失,有人访问或预加载之后才重新生成。

部署后的清缓存检查清单

Jason Career 现在每次部署都清 WP Rocket 和 Varnish 两层。把官方文档的信息加进去,完整的顺序是由内往外清:外层的缓存被清掉后,会回头向内层拿页面,内层如果还是旧的,外层又会存回旧版。

顺序 做什么 怎么做
1 确认这次改了哪些页面或文件 文章内容、自定义程序、CSS、JS 分开记
2 清 WP Rocket 后台“Clear and preload cache”,或 wp rocket clean --confirm
3 清 Cloudways 的 Varnish 平台 Manage Services 的 Varnish“Purge”,或 Cloudways API;用 wp rocket clean 时一定要做这步
4 视情况清 Cloudflare Cloudflare 有缓存 HTML,或改了 CSS、JS 时,用 Custom Purge 按网址清
5 用无痕窗口确认 cf-cache-status 不是 HIT、age 归零或很小,画面已经是新版
6 把规则写进 AI 的工作规则 让下一个会话也照这个顺序做

第 6 步是 10 月 10 日之后加的:两层一起清的规则写进了 Claude 的长期记忆,换一个会话部署,也会照同样的顺序做。我怎么限制 AI 在正式网站上的权限,见《看不懂 SSH 也能维护 WordPress》;更多文章在 AI 创业主题页。

常见问题

为什么清了 WP Rocket 缓存,WordPress 网站还是没变?

Cloudways 主机层还有一层 Varnish 缓存。Jason Career 在 2026 年 10 月 10 日就遇到过:只清 WP Rocket 不够,要另外清 Varnish,访客才看得到变更。之后每次部署都两层一起清。

WP Rocket 不是会自动清 Cloudways 的 Varnish 吗?

WP Rocket 官方文档说,在 Cloudways 上它会自动启用 Varnish 插件,清自己的缓存时一并清 Varnish。但文档也写了两个例外:WP-CLI 的 wp rocket clean 命令不会清 Varnish;网站前面有 Cloudflare 这类代理时,Varnish 可能清不掉。

Cloudways 的 Varnish 缓存要在哪里清?

Cloudways 官方博客的做法是在平台后台进入服务器的 Manage Services,点 Varnish 那一行的 Purge。Cloudways 也有 API 可以清 Varnish。

Cloudflare 会缓存 WordPress 的 HTML 页面吗?

Cloudflare 官方文档说,CDN 默认不缓存 HTML。除非另外设置了缓存规则,否则文章页面通常不会被 Cloudflare 存着。要确认可以看响应头的 cf-cache-status,是 HIT 才代表页面来自 Cloudflare 的缓存。

怎么知道访客看到的页面是哪一层缓存给的?

用无痕窗口打开页面,在浏览器开发者工具的 Network 标签页看第一个请求的响应头。cf-cache-status 是 HIT 代表来自 Cloudflare;不是 HIT 时再看 age,WP Rocket 文档说它是 Varnish 缓存的秒数,清掉 Varnish 后会归零。

部署 WordPress 变更后要清哪些缓存?

由内往外清:先清 WP Rocket,再清 Cloudways 的 Varnish;如果 Cloudflare 有缓存 HTML,最后清 Cloudflare。清完用无痕窗口和响应头确认,再把这个顺序写进部署流程。

延伸阅读

关于作者

Jason 的照片

Jason

Google 大客户销售客户经理、哥伦比亚大学 MBA 录取者,分享自己实际用过的理财工具与经验。

留言

使用 Google 登录即可留言。留言“不会”使用您的 Google 头像或姓名,对外显示的昵称是系统随机生成的代号,以保护您的隐私。

登录即表示你同意本站的隐私政策。

  1. 加载留言中…