Nginx Cache By Till Krüss

Nginx Cache 是一款“小而美”的 WordPress 工具插件,专注于 Nginx FastCGI 缓存清除的插件,把“清除 Nginx 缓存”这一件事做到了极致。

如果你是 Nginx 服务器管理员,正在寻找一个简单、可靠、不增加系统负担的缓存清除方案,那么这款插件几乎是完美的选择。但请注意,它不适合共享主机环境,并且要求你具备一定的服务器配置基础。

Nginx Cache By Till Krüss
Nginx Cache By Till Krüss

 

Nginx Cache 在内容发生变化时自动清除 Nginx 缓存(FastCGI、Proxy、uWSGI),或在 WordPress 后台手动清除。

下载地址:https://wordpress.org/plugins/nginx-cache/

Nginx Cache 要求:

  • 文件系统 API 应无需请求凭据即可正常运行。
  • Nginx 和 PHP 需要在同一用户下运行,或者 PHP 的用户需要对 Nginx 的缓存路径拥有写权限。

截图

如何在 WordPress 站点在 Nginx 上配置 FastCGI 缓存?

为 WordPress 站点在 Nginx 上配置 FastCGI 缓存,主要分为定义缓存空间配置缓存规则两大步骤。完成后,再配合缓存清理插件,就能实现高效的页面缓存。

整个配置过程的核心,其实就是修改 Nginx 的配置文件,具体分三步走。

第一步:在全局配置中定义缓存空间

首先,需要编辑 Nginx 的主配置文件(通常是 nginx.conf),在 http {} 块内添加 fastcgi_cache_path 指令来定义缓存文件的存放位置和参数

nginx
# 在 http {} 块中添加
fastcgi_cache_path /var/cache/nginx/fastcgi_cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
  • fastcgi_cache_path:定义了缓存目录(/var/cache/nginx/fastcgi_cache)、目录结构(levels=1:2)、缓存区名称和内存大小(keys_zone=WORDPRESS:100m)、缓存有效期(inactive=60m)等

  • fastcgi_cache_key:定义了生成缓存文件的唯一标识符,通常使用请求的协议、方法、域名和URI

操作提示:你需要先手动创建这个缓存目录,并确保 Nginx 运行用户(如 www-data 或 nginx)对其有读写权限。同时,不建议在缓存Key中使用 $args 查询参数,否则带不同跟踪码的相同页面会生成多份缓存,浪费空间

第二步:在站点配置中应用缓存规则

接着,编辑你站点的配置文件(通常在 conf.d/ 或 sites-available/ 目录下),在 server {} 块中针对 PHP 请求配置缓存规则

nginx
server {
    # ... 其他 server 配置
    set $skip_cache 0;
    # 不缓存POST请求、带查询字符串的请求、后台及登录用户
    if ($request_method = POST) { set $skip_cache 1; }
    if ($query_string != "") { set $skip_cache 1; }
    if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php") { set $skip_cache 1; }
    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") { set $skip_cache 1; }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 确保路径与你的PHP-FPM配置一致
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        # 应用缓存
        fastcgi_cache WORDPRESS; # 名称需与 keys_zone 一致
        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;
        fastcgi_cache_valid 200 301 302 10m; # 成功及重定向页面缓存10分钟
        fastcgi_cache_valid 404 1m;          # 404页面缓存1分钟
        add_header X-FastCGI-Cache $upstream_cache_status; # 添加调试头,查看缓存状态
    }
}
  • 关键的 $skip_cache 规则:通过一系列 if 语句,可以精准控制哪些内容被缓存

    • POST 请求:提交表单、登录等操作不应缓存。

    • 带查询字符串的请求:如搜索、分页结果,避免缓存不必要的内容。

    • WordPress 后台及特定文件/wp-admin/xmlrpc.php 等管理功能绝不缓存。

    • 已登录用户和评论者:他们看到的页面包含个性化内容,需要绕过缓存。

  • fastcgi_cache_valid:为不同的HTTP响应状态码设置缓存有效期,这是性能和安全性的平衡,过长的缓存会导致内容更新不及时

第三步:安装清理插件并验证

Nginx 默认没有提供直接的缓存清理接口,通常需要额外编译 ngx_cache_purge 模块,或使用 WordPress 插件更方便

  1. 安装插件:在 WordPress 后台搜索安装 Nginx Helper 插件

  2. 配置插件:在插件设置中,选择缓存类型为 “Nginx FastCGI Cache”,清理模式推荐选择 “Delete local server cache files”(直接删除本地文件),这个模式对服务器环境配置要求更低,不容易出错

  3. 定义缓存路径(重要):如果插件无法自动找到你的缓存目录,需要在 wp-config.php 文件中添加以下代码,告诉插件缓存文件的具体位置

    php
    define( 'RT_WP_NGINX_HELPER_CACHE_PATH', '/var/cache/nginx/fastcgi_cache' );
  4. 验证缓存:配置生效后,在浏览器开发者工具的“网络”面板中,查看任意页面响应的Headers。如果看到 X-FastCGI-Cache: HIT,就说明缓存已成功命中;MISS 则表示未命中,可能是首次访问;BYPASS 则表示因 $skip_cache 规则被绕过了

常见问题与提示

  • 启动失败:最可能的原因是 fastcgi_cache_path 指定的目录不存在或权限不足。请确保目录已创建且 Nginx 用户有读写权限

  • 缓存不生效:仔细检查 fastcgi_pass 的路径(如 PHP-FPM socket 地址)是否和现有配置一致,否则会导致PHP请求错误,从而无法缓存

  • 宝塔面板用户:如果你的服务器使用宝塔面板,这些配置可以直接在面板的“Nginx配置修改”和“网站设置-配置文件”中编辑。宝塔编译的Nginx通常已经包含 ngx_cache_purge 模块,可以更方便地实现按URL清理缓存