跳转至

在 cPanel EA4 上清除 WordPress 缓存

即时、自动的 WordPress 缓存失效—无需清除整个缓存。

🎉 免费访问 - 限时!

所有 EA4 模块目前都是 免费的 — 无需订阅! 了解更多


  • 自动失效


    当您编辑帖子、页面或评论时,缓存会自动清除—无需手动干预

  • 精准清除


    仅清除更改的页面—您的整个网站保持缓存并快速响应

  • 多租户安全


    每个 cPanel 用户的缓存是隔离的—用户无法清除彼此的内容

  • 零编码要求


    与 Proxy Cache Purge WordPress 插件开箱即用


5 分钟设置

按照以下步骤在您的 cPanel 服务器上启用智能缓存清除。


步骤 1:安装缓存清除模块

# 安装 GetPageSpeed 仓库(在 cPanel 服务器上自动启用 ea4 仓库)
dnf -y install https://extras.getpagespeed.com/release-latest.rpm

# 安装缓存清除模块
dnf -y install ea-nginx-cache-purge

步骤 2:配置 NGINX

您可以为所有用户或每个用户全局启用缓存清除。

创建 /etc/nginx/conf.d/server-includes/cache-purge.conf

# 启用 PURGE 方法进行缓存清除(所有用户)
proxy_cache_purge PURGE from 127.0.0.1;

此文件会自动包含在所有 cPanel 用户的服务器块中。

对于用户 username,创建 /etc/nginx/conf.d/users/username/cache-purge.conf

# 启用 PURGE 方法进行缓存清除
proxy_cache_purge PURGE from 127.0.0.1;

创建配置后,重新加载 NGINX:

nginx -t && systemctl reload nginx

步骤 3:安装 Proxy Cache Purge 插件

  1. 转到 插件 → 添加新插件
  2. 搜索 "Proxy Cache Purge"(slug: varnish-http-purge
  3. 点击 立即安装,然后 激活
wp plugin install varnish-http-purge --activate

步骤 4:配置 Proxy Cache Purge

在 WordPress 管理中:

  1. 转到 设置 → Proxy Cache Purge
  2. "设置自定义 IP" 设置为:127.0.0.1
  3. 点击 保存设置

关键设置

插件必须将 PURGE 请求发送到 127.0.0.1(本地主机),而不是您的公共 IP 或域名。


步骤 5:配置 NGINX 缓存后端

Proxy Cache Purge 5.9.0 开始,插件原生支持 NGINX 的通配符清除格式。配置它以使用 NGINX 后端:

  1. 转到 Proxy Cache Purge → 设置
  2. 缓存后端 下,选择 NGINX
  3. 点击 保存设置

添加到您的 wp-config.php

define( 'VHP_PURGE_BACKEND', 'nginx' );

这确保在清除页面时,所有缓存变体(gzip、brotli、未压缩)都被清除。

遗留:插件版本 < 5.9.0

如果您正在运行早于 5.9.0 的 Proxy Cache Purge,请创建 wp-content/mu-plugins/nginx-cache-purge-fix.php

<?php
/**
 * 插件名称:NGINX 缓存清除修复
 * 描述:为 Vary 头兼容性附加通配符以清除 URL
 */
add_filter("vhp_purgeme_path", function($purgeme, $schema, $host, $path, $pregex, $p) {
    if (empty($pregex)) {
        $purgeme .= "*";
    }
    return $purgeme;
}, 10, 6);

测试设置

# 1. 缓存一个页面(第一次请求 = MISS,第二次 = HIT)
curl -sI http://127.0.0.1/sample-page/ -H 'Host: yourdomain.com' -H 'Accept-Encoding: gzip' | grep X-Cache
# X-Cache-Status: MISS
curl -sI http://127.0.0.1/sample-page/ -H 'Host: yourdomain.com' -H 'Accept-Encoding: gzip' | grep X-Cache
# X-Cache-Status: HIT

# 2. 使用通配符的 PURGE 方法进行清除
curl -sX PURGE 'http://127.0.0.1/sample-page/*' -H 'Host: yourdomain.com'
# <h1>成功清除</h1>

# 3. 验证缓存已清除
curl -sI http://127.0.0.1/sample-page/ -H 'Host: yourdomain.com' -H 'Accept-Encoding: gzip' | grep X-Cache
# X-Cache-Status: MISS

然后通过 WordPress 进行测试:

  1. 编辑任何已发布的帖子
  2. 进行更改并点击 更新
  3. 插件会自动清除缓存
  4. 访问该页面—它应该显示新内容

工作原理

flowchart TD
    subgraph WordPress["<b>WordPress</b>"]
        A[📝 帖子已更新] --> B["🔌 Proxy Cache Purge 插件"]
        B --> C["PURGE http://127.0.0.1/post-slug/*<br/>Host: yourdomain.com"]
    end

    C --> D

    subgraph NGINX["<b>NGINX (ea-nginx)</b>"]
        D["🔒 proxy_cache_purge PURGE from 127.0.0.1"] --> E["🗑️ ngx_cache_purge 模块"]
        E --> F["✓ 通配符匹配所有变体<br/>(gzip、brotli、plain)"]
        F --> G["✓ 从磁盘缓存中删除"]
        G --> H["✅ 返回 '成功清除'"]
    end

    style WordPress fill:#4a90d9,stroke:#2d5986,color:#fff
    style NGINX fill:#009639,stroke:#006325,color:#fff
    style A fill:#5ba0e0
    style B fill:#5ba0e0
    style C fill:#5ba0e0
    style D fill:#00a844
    style E fill:#00a844
    style F fill:#00a844
    style G fill:#00a844
    style H fill:#00a844

发生了什么

  1. 您在 WordPress 中更新了一篇帖子
  2. 插件向本地主机发送 PURGE 请求
  3. NGINX 模块仅从缓存中移除 该 URL
  4. 下一个访问者获取新内容,其余缓存保持不变

为什么它这么快

  • 没有完全清除缓存 — 其他页面保持缓存
  • 仅限本地请求 — 没有网络延迟
  • 通配符支持 — 一次性清除所有编码变体

高级:减少缓存变体

可选优化

推荐用于高流量网站,以最大化缓存命中率。

Vary: Accept-Encoding 头导致 NGINX 为不同的 Accept-Encoding 组合创建单独的缓存条目。浏览器以不同的顺序发送这些,导致缓存膨胀:

原始 Accept-Encoding 问题
gzip, br, deflate 单独的缓存条目
br, gzip 另一个单独的条目
gzip, deflate 又一个条目

解决方案:标准化头部

compression-normalize 模块将头部标准化为一致的值:

dnf -y install ea-nginx-compression-normalize

创建 /etc/nginx/conf.d/compression-normalize.conf

# 标准化 Accept-Encoding 以减少缓存变体
# 优先顺序:优先 brotli,然后 gzip
compression_normalize_accept_encoding br,gzip br gzip;

结果: 数百个可能的变体 → 仅 3 个 (br,gzip, br, gzip)。


安全性

仅限本地主机访问

proxy_cache_purge PURGE from 127.0.0.1;

外部 PURGE 请求将作为正常请求处理,而不是清除请求。

用户隔离

每个 cPanel 用户都有自己的缓存区域。用户 alice 无法清除用户 bob 的缓存—即使使用相同的 URL 路径。


故障排除

缓存未被清除
  1. 验证插件设置:
  2. 转到 设置 → Proxy Cache Purge
  3. 确保 自定义 IP 设置为 127.0.0.1

  4. 检查缓存后端设置:

  5. 转到 Proxy Cache Purge → 设置 并验证 缓存后端 设置为 NGINX
  6. 或检查 wp-config.php 是否包含 define( 'VHP_PURGE_BACKEND', 'nginx' );

  7. 检查 NGINX 配置是否已加载:

    nginx -T | grep cache_purge
    

412 前提条件失败

这意味着 URL 不在缓存中。这不是错误—只是没有可清除的内容。

模块未加载
# 检查是否已安装
rpm -q ea-nginx-cache-purge

# 检查模块文件
ls -la /etc/nginx/modules/ngx_http_cache_purge_module.so

相关

  • cPanel EA4 仓库


    cPanel 的 ea-nginx 模块的完整设置指南

    了解更多

  • cache-purge 模块


    完整的指令参考和高级用法

    文档

  • Proxy Cache Purge 插件


    官方 WordPress 插件页面

    WordPress.org