精准清理nginx某条缓存的核心是proxy_cache_purge计算的key与proxy_cache_key完全一致,非按url路径删除;需确保模块启用、keys_zone匹配、purge key逐字符复现缓存key,并严格限制访问权限。

要精准清理 Nginx 中的某一条缓存,核心是让 proxy_cache_purge 指令计算出的 key 与后端实际缓存时使用的 proxy_cache_key 完全一致。它不是按 URL 路径删,而是按缓存键值删——键对上了,才能命中。
确保 purge 模块和缓存区已就绪
先确认基础条件是否满足:
- 运行
nginx -V 2>&1 | grep cache_purge,输出含ngx_cache_purge才说明模块已编译启用 - 检查
proxy_cache_path是否定义了keys_zone(如my_cache:10m),且名称在proxy_cache_purge和proxy_cache中保持一致 - 缓存路径目录(如
/var/cache/nginx/proxy_cache)需存在,且 Nginx worker 进程有读写权限
构造完全匹配的 purge key
purge location 中的 key 表达式必须和缓存时的 proxy_cache_key 逐字符一致。常见配置与对应 purge 写法:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 若缓存配置为:
proxy_cache_key "$scheme$request_method$host$request_uri";
则 purge 应写为:proxy_cache_purge my_cache "$scheme$request_method$host$1";(注意:正则捕获的$1需覆盖完整$request_uri,含参数) - 若缓存含参数且使用
$is_args$args,purge 也必须带参数,例如访问/api/user?id=123,请求 purge 接口时得用/purge/api/user?id=123 - 若缓存 key 中包含
$http_cookie或$http_authorization,purge 请求必须携带相同请求头,否则无法匹配
安全暴露 purge 接口
不建议开放任意 IP 可调用,推荐最小权限暴露:
- 用
location ~ /purge(/.*)?匹配路径,避免影响其他路由 - 限制来源:
allow 127.0.0.1;+ 允许内网段(如allow 192.168.1.0/24;),最后加deny all; - 可叠加限速或 Token 验证(如用
map+auth_request),防止被恶意刷清
验证是否真正清除成功
返回 200 不代表缓存已删,需多角度确认:
- 发起一次原始请求(如
curl -I http://example.com/foo),看响应头X-Cache-Status是否从HIT变为MIS或MISS - 手动检查缓存目录中对应哈希文件是否消失(路径由
levels和 key 的 MD5 决定,如ab/cdef...) - 用
curl -X PURGE请求后,观察 Nginx error log 是否出现cache file not found(表示之前无缓存)或静默成功(表示已删)










