要用 Purge 模块清除 Nginx 缓存,必须确保 proxy_cache_purge 匹配原始 cache_key;先用 nginx -V 验证模块存在,再严格统一 cache_key 与 purge key 的变量组合(如 $scheme$request_method$host$request_uri),配置带 IP 限制的 /purge location,最后用 curl -X PURGE 验证响应码及 X-Cache-Status 头变化。

要用 Purge 模块主动清除指定 URL 的 Nginx 缓存,核心是让 proxy_cache_purge 指令精准匹配到你当初缓存时用的 key。它不是“删页面”,而是“删那个 key 对应的缓存条目”——匹配对了,秒删;错一点,就 404 或假成功。
确认模块已编译进 Nginx
执行命令检查:
nginx -V 2>&1 | grep -o ngx_cache_purge
如果无输出,说明未启用该模块。此时需:
- 使用 OpenResty(默认集成)
- 或从源码重新编译 Nginx,添加 --add-module=/path/to/ngx_cache_purge
- 模块源码推荐从 GitHub 官方仓库获取:https://www.php.cn/link/a6104a16f4c583147e53daee7fcb4550
确保 cache_key 与 purge key 完全一致
这是最关键的一步。例如你配置了:
proxy_cache_key "$scheme$request_method$host$request_uri";
那么 purge 请求的目标 key 就必须复用完全相同的变量组合。对应 location 配置应为:
location ~ /purge(/.*) {
proxy_cache_purge my_cache "$scheme$request_method$host$1$is_args$args";
}
注意细节:
-
$request_uri包含查询参数(如/api?id=1&v=2),而$uri不包含,务必用前者 - 参数顺序、大小写、编码(如空格是
%20还是+)必须和原始请求完全一致 - 避免在 key 中引入动态值(如
$cookie_session),否则 purge 无法覆盖所有变体
配置 purge 接口并限制访问
在 server 或 http 块中添加如下 location:
location ~ /purge(/.*) {
allow 192.168.1.0/24;
allow 127.0.0.1;
deny all;
proxy_cache_purge my_cache "$scheme$request_method$host$1$is_args$args";
}
说明:
-
my_cache必须与proxy_cache_path中定义的keys_zone名称完全一致 - 该 location 不需要
proxy_pass,仅用于触发 purge 动作 -
allow建议限定内网运维 IP 段,生产环境切勿写allow all
发起 PURGE 请求并验证效果
用 curl 清理指定 URL:
curl -X PURGE "http://example.com/api/data?version=2"
响应含义:
- 200:key 匹配成功,缓存已删除(但需进一步验证是否真删)
- 404:当前未缓存,或 key 不匹配(最常见原因)
-
405:请求方法不被允许(检查是否漏了
-X PURGE)
真正验证是否生效,看响应头:
- 首次访问目标 URL →
X-Cache-Status: MISS - 再次访问 →
X-Cache-Status: HIT(说明缓存已建) - 执行 purge 后再访问 → 应再次出现
MISS,且无HIT回退











