要用 ngx_cache_purge 主动清理指定缓存,核心是让 PURGE 请求精准命中目标缓存项——这依赖模块支持、缓存键一致、路径匹配和访问控制四者协同。它不是“一键清空”,而是“按 URL 精准删除”。

要用 ngx_cache_purge 主动清理指定缓存,核心是让 PURGE 请求精准命中目标缓存项——这依赖模块支持、缓存键一致、路径匹配和访问控制四者协同。它不是“一键清空”,而是“按 URL 精准删除”。
确认模块已正确启用
该模块非 Nginx 官方内置,必须显式编译或安装:
- 运行
nginx -V 2>&1 | grep -o with-http-cache-purge-module,有输出才表示已集成 - 若无输出,需重新编译 Nginx(添加
--add-module=/path/to/ngx_cache_purge),或改用 OpenResty(默认含该模块) - Debian/Ubuntu 可尝试
sudo apt install libnginx-mod-http-cache-purge;CentOS/RHEL 对应安装nginx-mod-http-cache-purge
确保 proxy_cache_key 与 purge key 完全一致
缓存能否被清除,90% 取决于 key 字符串是否完全相同。Nginx 不做归一化处理:
- 例如缓存配置为:
proxy_cache_key "$scheme$host$request_uri"; - 则 purge location 中必须复用相同结构:
proxy_cache_purge my_cache "$scheme$host$1$is_args$args"; - 常见错误:用
$uri(不含参数)代替$request_uri;漏掉$is_args$args导致带参 URL 清不掉;大小写或编码差异(如%20vs 空格)也会失配
配置专用 purge location 并严格限制访问
这是高危接口,必须白名单防护:
- 定义一个正则匹配的 location,如
location ~ ^/purge(/.*),其中$1捕获待清理的真实路径 - 只允许可信 IP 访问:
allow 127.0.0.1;、allow 192.168.10.0/24;,最后加deny all; - 指令示例:
location ~ ^/purge(/.*) {<br> allow 127.0.0.1;<br> proxy_cache_purge my_cache "$scheme$host$1$is_args$args";<br>}
触发清理并验证效果
清理不是删磁盘文件,而是移除共享内存中的缓存元数据,后续请求立即回源:
- 执行命令:
curl -X PURGE https://example.com/article/123,返回 200 表示命中并标记为待清理 - 验证是否生效:访问目标 URL,响应头中
X-Cache-Status应从HIT变为MISS - 注意:磁盘缓存文件不会立刻删除,由 cache manager 进程按
inactive时间异步回收


















