必须启用ngx_cache_purge模块并静态编译进Nginx,验证命令为nginx -V 2>&1 | grep -o 'cache_purge';purge location中key变量须与proxy_cache_key严格一致,且仅允许可信内网IP访问,PURGE请求返回200表示成功、404表示无缓存、405表示方法不被允许。

要让 Nginx 在生产环境支持按 URL 手动清理缓存,必须启用 proxy_cache_purge 模块,并确保其行为与现有缓存逻辑完全对齐。原生 Nginx 不提供 PURGE 方法,该能力完全依赖第三方模块 ngx_cache_purge,且它不支持动态加载,只能静态编译集成。
确认模块已正确编译并启用
执行以下命令验证模块是否就绪:
nginx -V 2>&1 | grep -o 'cache_purge'
若输出包含 cache_purge,说明模块已加载;否则需重新编译 Nginx,添加:--add-module=/path/to/ngx_cache_purge
注意选用与当前 Nginx 版本兼容的模块分支(如 release/v2.5+)。
缓存区域与 purge location 必须严格匹配
purge 功能生效的前提是:缓存 key 的生成方式、使用的 keys_zone、以及 purge 请求中构造的 key 三者完全一致。常见错误就是 purge location 中的 key 变量与 proxy_cache_key 不对应。
例如,若缓存配置为:
proxy_cache_key "$scheme$request_method$host$request_uri";
则 purge location 应写为:
location ~ ^/purge(/.*)$ {
allow 127.0.0.1;
allow 10.10.0.0/16;
deny all;
proxy_cache_purge my_cache "$scheme$request_method$host$1";
}
其中 $1 是正则捕获的路径部分,确保它等价于 $request_uri 中被 purge 的那部分;若原始缓存 key 包含 $args,这里也必须补上 $is_args$args。
限制访问权限,禁止公网暴露 purge 接口
purge 是高危操作,一旦被恶意调用可能导致缓存雪崩或服务抖动。务必只允许可信来源访问:
- 使用
allow明确指定内网 IP 段(如运维跳板机、CI/CD 发布节点) - 避免仅靠
deny all收尾,应显式拒绝所有未授权地址 - 不建议使用域名或通配符,IP 白名单最可靠
- 可配合 Nginx 的
auth_request做二次校验(如对接内部鉴权服务)
测试与验证清除效果
清除不是“删文件”,而是使对应 key 的缓存条目失效。可通过响应头和状态码判断结果:
- 发送
curl -X PURGE http://example.com/purge/api/v1/user/1001 - 返回
200:表示 purge 成功(无论原缓存是否存在) - 返回
404:说明该 URL 当前无缓存(不是失败,是预期行为) - 返回
405:检查是否用了 GET/POST 方法,PURGE 必须是大写且服务端允许该 method - 配合
add_header X-Cache-Status $upstream_cache_status;查看后续请求是否命中 HIT











