nginx主动失效清理接口通过ngx_cache_purge模块实现按url精准清除proxy_cache缓存,需编译启用该模块并配置专用purge location,依赖缓存key严格一致,成功返回204,不作用于浏览器或fastcgi缓存。

主动失效清理接口,本质是让 Nginx 支持按 URL 精准清除已缓存内容,而不是等它自然过期或全盘删除。这需要两个前提:一是启用 ngx_cache_purge 模块,二是配置专用的 location 处理 PURGE 请求。
确认并启用 ngx_cache_purge 模块
该模块不是 Nginx 默认内置的,必须在编译时加入或通过动态模块加载。检查是否已支持:
- 运行
nginx -V 2>&1 | grep -o with-http-cache-purge-module,有输出即表示已编译支持 - 若无输出,需重新编译 Nginx 并添加
--with-http-cache-purge-module,或使用预编译支持该模块的发行版(如 OpenResty)
配置缓存区与 purge 接口
在 http 块中定义缓存路径和共享内存区,再在 server 块中添加 purge 路由:
proxy_cache_path /var/cache/nginx/static_cache levels=1:2 keys_zone=static_cache:20m max_size=500m inactive=1h;-
proxy_cache static_cache;(放在要缓存的 location 内) - 新增 purge location(建议限制访问来源):
allow 127.0.0.1;
allow ::1;
deny all;
proxy_cache_purge static_cache $scheme$host$1$is_args$args;
}
触发清理的实际用法
发送 HTTP PURGE 请求即可立即移除对应 URI 的缓存项:
- 清除单个资源:
curl -X PURGE http://example.com/purge/css/app.css - 清除带查询参数的资源:
curl -X PURGE "http://example.com/purge/api/user?id=123" - 注意:
$scheme$host$1$is_args$args构造的 key 必须与原始缓存 key 完全一致,否则无法匹配清除
关键细节提醒
主动清理不是“万能开关”,它依赖缓存 key 的一致性设计:
- 如果原始缓存用了自定义
proxy_cache_key(比如含请求头、cookie),purge location 中的 key 也必须完全复现,否则找不到目标缓存 - PURGE 请求本身不返回缓存内容,成功时返回 204 No Content;未命中缓存则返回 404
- 该机制只清理 proxy_cache,对浏览器缓存、fastcgi_cache 或 upstream 自身响应头控制的缓存无效











