ngx_cache_purge模块支持nginx缓存的精准清除,需编译安装、确保cache_key与purge路径严格匹配、配置白名单访问权限,并通过purge请求触发验证。

使用 ngx_cache_purge 模块可实现对 Nginx 缓存中指定 URL 的即时、精准清除,无需重启服务或清空整个缓存目录。关键在于正确编译安装模块、配置 cache key 与 purge 规则对齐,并通过 HTTP 请求触发清理。
编译安装 ngx_cache_purge 模块
该模块未被官方 Nginx 收录,需在编译时手动添加:
- 下载对应 Nginx 版本源码及
ngx_cache_purge源码(推荐使用 FRiCKLE 维护的稳定分支) - 进入 Nginx 源码目录,执行 configure 命令时加入:
--add-module=/path/to/ngx_cache_purge - 确保不启用
--without-http-cache,否则 proxy_cache 相关功能不可用 - 完成 make && make install;验证是否加载成功:
nginx -V 2>&1 | grep -o 'cache_purge'
配置 cache key 与 purge 路径严格匹配
purge 功能依赖于请求 URI 与缓存 key 的映射关系,必须保证二者逻辑一致:
- 在
proxy_cache_key中避免使用动态变量(如$args、$cookie_*),除非 purge 请求也携带相同参数 - 推荐写法:
proxy_cache_key "$scheme$request_method$host$request_uri"; - 若需忽略参数清理,可在 location 中用
rewrite统一归一化 URI,或改用map构建标准化 key - 确保 purge 请求的路径与缓存 key 解析出的路径完全一致(区分大小写、尾部斜杠、编码格式)
启用 purge 接口并限制访问权限
通过专用 location 暴露 purge 端点,仅允许可信来源调用:
- 示例配置:
location ~ /purge(/.*) {<br> allow 127.0.0.1;<br> allow 192.168.10.0/24;<br> deny all;<br> proxy_cache_purge $cache_zone $1;<br>} -
$cache_zone需替换为实际定义的 cache zone 名称(如my_cache) -
$1表示正则捕获的路径部分,确保能覆盖目标 URL(如访问/purge/api/user/123可清除/api/user/123缓存) - 生产环境务必配合 IP 白名单或内部鉴权(如 bearer token 校验 via auth_request)
触发清理与验证效果
发送 HTTP 请求即可秒级生效,响应状态码可快速判断结果:
- 成功清除返回
200 OK;未命中缓存返回204 No Content;无权限返回403 Forbidden - 测试命令:
curl -X PURGE http://localhost/purge/test.html - 验证是否生效:两次请求同一 URL,第二次响应头应含
X-Cache: MISS或Age: 0 - 注意浏览器缓存干扰,建议用
curl -H "Cache-Control: no-cache"或禁用代理缓存测试
不复杂但容易忽略细节,核心是 key 一致、模块可用、权限可控、验证到位。











