ngx_cache_purge 是第三方模块,用于通过 purge 请求精准清理 proxy_cache 缓存;需编译进 nginx,配置 location ~ /purge(/.*) 并指定正确 keys_zone,配合 allow 限制访问,curl -x purge 发起清理,响应 200 表示成功。

用第三方模块清理 proxy_cache 缓存,核心是 ngx_cache_purge。它不是 Nginx 自带模块,但能通过 HTTP 请求精准删除指定 URL 对应的缓存条目,不中断服务、不误删其他缓存。
确认当前 Nginx 是否已支持 purge
执行命令检查:
nginx -V 2>&1 | grep -o ngx_cache_purge若无输出,说明未编译该模块,需重新编译 Nginx 并加入 --add-module=/path/to/ngx_cache_purge。模块源码可从 GitHub 克隆(如 https://github.com/FRiCKLE/ngx_cache_purge)。
配置 purge location 并绑定缓存 zone
在 server 或 http 块中添加如下配置(注意替换 my_cache 为你的实际 keys_zone 名):
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
location ~ /purge(/.*) {
allow 192.168.1.0/24; # 限制内网运维 IP 段
deny all;
proxy_cache_purge my_cache $1$is_args$args;
}
关键点:
-
$1匹配正则捕获的路径部分,$is_args$args必须显式带上,否则带查询参数的 URL(如/api?x=1)无法命中 -
my_cache必须与proxy_cache_path中定义的keys_zone名称完全一致 - 该 location 不需要
proxy_pass,仅用于触发 purge 动作
发送 PURGE 请求清理指定缓存
使用 curl 发起清理:
curl -X PURGE "http://example.com/path/to/resource?param=value"响应说明:
-
200:缓存存在且已成功删除 -
404:该 URL 当前未被缓存,或proxy_cache_key配置不匹配(比如漏了$host或$scheme) -
405:请求方法不被允许(检查是否用了POST或没加-X PURGE)
避免常见陷阱
以下操作极易导致清理失败或误删:
- 直接
rm -rf /var/cache/nginx/*:会清空所有缓存 zone 的文件,包括其他站点的缓存;若多个proxy_cache_path共用同一父目录,后果更严重 - reload 配置(
nginx -s reload):不清理任何缓存,只是重载配置,磁盘和共享内存中的缓存保持不变 - purge location 中写错
keys_zone名或 key 构造逻辑,导致 404 静默失败 - 未限制访问来源,将
allow 127.0.0.1暴露到公网,造成缓存被恶意清空










