跳转至

VPS 上的 WordPress 缓存清除

在任何基于 RHEL 的 VPS 或专用服务器上,立即自动清除 WordPress 缓存。


  • 自动清除


    当您编辑帖子、页面或评论时,缓存会自动清除

  • 精准清除


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

  • 5 分钟设置


    使用我们预构建的 NGINX 模块进行简单配置

  • 基于磁盘的缓存


    缓存在 NGINX 重启后仍然存在——更新后没有冷缓存


先决条件

  • 一台运行 RHEL 7/8/9Rocky LinuxAlmaLinuxAmazon Linux 的 VPS 或专用服务器
  • 安装了 NGINX(推荐使用 GetPageSpeed 仓库)
  • 配置了完整页面缓存的 WordPress 网站

快速设置

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

# 安装 GetPageSpeed 仓库
dnf -y install https://extras.getpagespeed.com/release-latest.rpm

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

/etc/nginx/nginx.conf 中启用该模块:

load_module modules/ngx_http_cache_purge_module.so;

步骤 2:配置 NGINX 代理缓存

如果您尚未配置代理缓存,以下是完整的设置:

编辑 /etc/nginx/nginx.conf 或创建 /etc/nginx/conf.d/proxy-cache.conf

# 定义缓存区域(在 http 块中)
proxy_cache_path /var/cache/nginx/wordpress
                 levels=1:2
                 keys_zone=wordpress:100m
                 max_size=10g
                 inactive=60m
                 use_temp_path=off;

在您的服务器块中:

server {
    listen 80;
    server_name example.com;

    # 启用缓存
    proxy_cache wordpress;
    proxy_cache_valid 200 60m;
    proxy_cache_valid 404 1m;
    proxy_cache_key "$scheme$request_method$host$request_uri";

    # 添加缓存状态头
    add_header X-Cache-Status $upstream_cache_status;

    # 启用 PURGE 方法(仅限 localhost)
    proxy_cache_purge PURGE from 127.0.0.1;

    location / {
        proxy_pass http://127.0.0.1:8080;  # 您的后端
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

创建缓存目录:

mkdir -p /var/cache/nginx/wordpress
chown nginx:nginx /var/cache/nginx/wordpress
nginx -t && systemctl reload nginx

步骤 3:安装代理缓存清除插件

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

步骤 4:配置代理缓存清除

在 WordPress 管理中:

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

关键设置

插件必须将 PURGE 请求发送到 127.0.0.1(localhost),而不是您的公共 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' );
遗留:插件版本 < 5.9.0

如果您运行的 Proxy Cache Purge 版本低于 5.9.0,请创建 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. 缓存一个页面
curl -sI http://127.0.0.1/sample-page/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS (第一次请求)
curl -sI http://127.0.0.1/sample-page/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: HIT (缓存!)

# 2. 清除页面
curl -sX PURGE 'http://127.0.0.1/sample-page/*' -H 'Host: example.com'
# <h1>成功清除</h1>

# 3. 验证缓存已清除
curl -sI http://127.0.0.1/sample-page/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS (已清除!)

工作原理

flowchart LR
    subgraph WP["WordPress"]
        A["📝 帖子已更新"] --> B["🔌 插件"]
    end

    B -->|"PURGE /post/*"| C

    subgraph NG["NGINX"]
        C["🗑️ cache_purge"] --> D["✅ 页面已移除"]
    end

    E["👤 访客"] -->|"GET /post/"| NG
    D --> F["提供新内容"]

    style WP fill:#4a90d9,stroke:#2d5986,color:#fff
    style NG fill:#009639,stroke:#006325,color:#fff

性能提示

  • 使用 RAM 磁盘进行热缓存


    /var/cache/nginx 挂载为 tmpfs,以获得最快的缓存读取速度

    mount -t tmpfs -o size=2G tmpfs /var/cache/nginx
    
  • 标准化压缩头


    使用 compression-normalize 模块减少缓存变体

  • 为登录用户绕过缓存


    proxy_cache_bypass $cookie_wordpress_logged_in;
    

安全考虑

from 127.0.0.1 限制是 关键

proxy_cache_purge PURGE from 127.0.0.1;

没有它,任何人都可以通过发送 PURGE 请求来清除您的缓存。

为了进一步增强安全性,您还可以:

# 仅允许特定 IP 的 PURGE
proxy_cache_purge PURGE from 127.0.0.1 10.0.0.0/8;

# 或要求身份验证
# (本指南未涵盖)

故障排除

X-Cache-Status 始终显示 MISS
  • 检查 proxy_cache 指令是否已启用
  • 验证缓存目录是否存在并且可被 nginx 写入
  • 检查 proxy_cache_bypass 规则是否总是触发
PURGE 返回 404
  • 确保 proxy_cache_purge 指令在正确的位置块中
  • 检查模块是否已加载:nginx -V 2>&1 | grep cache_purge
缓存目录填满
  • 调整 proxy_cache_path 中的 max_size
  • 减少 inactive 超时
  • 运行 nginx -s reload 以触发缓存管理器清理

相关

  • cache-purge 模块


    完整指令参考

    文档

  • compression-normalize 模块


    减少缓存变体

    文档

  • FastCGI 缓存指南


    PHP-FPM 的替代缓存方法

    FastCGI 缓存