实现Nginx网关层缓存一键清除需引入ngx_cache_purge模块,因其支持按URI等精准主动清理;该模块须静态编译进Nginx,配置时需与proxy_cache共用zone并限制IP白名单,通过PURGE请求触发清除。

要实现 Nginx 网关层缓存的一键清除,核心不在于原生 Nginx(它本身不提供按 URL 或 Key 主动清理缓存的接口),而在于引入支持缓存管理的第三方模块——最常用、最稳定的是 ngx_cache_purge。
为什么需要 ngx_cache_purge 模块
Nginx 自带的 proxy_cache 机制只支持被动失效(如过期、源站返回 200/301/302 等响应头含 Cache-Control 或 Expires)或全量清空(删缓存目录)。生产中常需按 URI、参数甚至自定义 key 精准下线某条缓存,比如:发布后刷新首页、修改商品详情后立即生效、AB 测试灰度切流时清理特定路径。这些都依赖主动 purge 能力。
编译安装 ngx_cache_purge(以 Nginx 1.24 为例)
该模块不支持动态加载,必须在编译 Nginx 时静态集成:
- 下载对应版本的 ngx_cache_purge 源码(注意分支兼容性,推荐使用 release/v2.5+)
- 进入 Nginx 源码目录,执行 configure 并添加模块路径:
--add-module=/path/to/ngx_cache_purge - 重新编译安装:
make && sudo make install - 验证是否生效:
nginx -V 2>&1 | grep -o 'cache_purge'应有输出
配置支持 purge 的 cache 区域与 location
关键点:purge 指令只能放在 location 块中,且必须与 proxy_cache 使用同一 cache zone;同时需限制访问权限,防止被恶意调用:
- 定义缓存区(在 http 块):
proxy_cache_path /var/cache/nginx/my_cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off; - 配置可 purge 的 location(建议独立 path,如 /purge):
location ~ ^/purge(/.*)$ {<br> allow 127.0.0.1;<br> allow 10.0.0.0/8;<br> deny all;<br> proxy_cache_purge my_cache "$scheme$request_method$host$1";<br>} - 说明:
$1是正则捕获的路径部分,确保 purge 的 key 与缓存 key 一致(需和 proxy_cache_key 对齐)
一键清除缓存的操作方式
清除动作即一次 HTTP 请求,方法为 PURGE(非标准方法,但被广泛接受):
- 清除单个 URL 缓存:
curl -X PURGE http://your-domain.com/purge/→ 清首页curl -X PURGE http://your-domain.com/purge/api/v1/user/123→ 清指定接口 - 返回状态码含义:
200 表示成功 purge(即使原缓存不存在)
404 表示未命中缓存(无此 key)
405 表示请求方法不被允许(检查是否用了 GET/POST)
403 表示 IP 不在白名单内 - 脚本化一键清理(例如发布后自动触发):
#!/bin/bash<br>curl -s -o /dev/null -w "%{http_code}" -X PURGE "http://127.0.0.1/purge$1"

















