导致 Cloudflare 无法缓存网站页面的常见问题之一是它始终返回状态 REVALIDATED 或 EXPIRED 代替 HIT),原因是存在响应头 Cache-Control: no-cache 来自源服务器。本文将指导你如何详细诊断并彻底解决在使用 Nginx 作为 OpenLiteSpeed 前置反向代理的系统中出现的此问题。.
1. 问题症状
当你使用 curl 命令或浏览器开发者工具(F12)检查网站或静态文件(如 CSS、JS、图片)的 Response Headers 时,会看到以下响应头同时出现:
Cache-Control: public, max-age=2592000
Cache-Control: no-cache
Cf-Cache-Status: EXPIRED(或 REVALIDATED)两个 Cache-Control 响应头同时出现且彼此矛盾,会让 Cloudflare 无法正确判断。 no-cache 会强制 Cloudflare 在每次访问时都向源服务器发送重新验证(revalidate)请求,从而增加响应时间(TTFB)并使源服务器负载过高。.
2. 诊断过程与原因确定
要彻底解决此问题,我们需要逐步隔离原因:
- 步骤 1:检查插件和 .htaccess: 许多人通常认为问题来自 WordPress 缓存插件(如 LiteSpeed Cache)或文件
.htaccess. 。但是,如果你使用 OpenLiteSpeed,它通常会忽略文件中的响应头配置(如mod_headers)。.htaccess. - 步骤 2:直接检查源服务器 IP(Origin IP): 直接对源服务器 IP 运行 curl 命令(绕过 Cloudflare),以查看哪些响应头由服务器生成:
curl -I -k -H "Host: yourdomain.com" https://[SERVER_IP]/wp-includes/css/dist/block-library/style.min.css如果响应头
Server: nginx与x-turbo-charged-by: LiteSpeed, 同时出现,则你的系统肯定是在 OpenLiteSpeed 前使用 Nginx 作为反向代理的架构。.
3. 彻底处理方法
步骤 1:删除 Nginx 中的硬编码配置行
在 aaPanel 等控制面板中配置反向代理时,系统通常会自动在 Nginx 中添加禁止缓存的配置行,以避免 Node.js/Python 应用的动态数据问题。你需要删除它。.
打开域名的 Nginx 配置文件(通常位于 /www/server/panel/vhost/nginx/yourdomain.com.conf),找到配置块 location /:
location / {
proxy_pass http://127.0.0.1:8188;
...
# 删除或注释掉以下行:
# add_header Cache-Control no-cache;
}然后保存并 重启 Nginx (Restart Nginx)。.
步骤 2:关闭 OpenLiteSpeed 缓存模块(若使用 Cloudflare Page Cache)
如果你正在使用类似 Super Page Cache for Cloudflare 的插件来管理 Cloudflare 和本地磁盘缓存,请关闭 OpenLiteSpeed 的缓存模块以避免冲突。.
通过 aaPanel 界面打开 OpenLiteSpeed 的全局配置(httpd_config.conf),找到配置块 module cache 并修改为:
module cache {
ls_enabled 0 # 将 1 改为 0 以关闭模块
...
}保存并 重启 OpenLiteSpeed.
4. 处理后的结果
完成上述两个步骤后,再次运行检查命令。你会发现只剩下一个 Cache-Control 由 WordPress/LiteSpeed 发出的有效响应头,Cloudflare 将在后续访问中立即返回状态 HIT 。.




