Nginx原生proxy_cache_purge不支持API批量清理,仅响应单次精确匹配PURGE请求;批量效果需通过脚本并发调用或map白名单+后端配合实现,且受cache key一致性、无通配符、无原子目录清理等硬性限制。

Nginx 原生 proxy_cache_purge 模块不直接支持 API 批量清理,它只响应单次、精确匹配的 PURGE 请求——即每次只能清理一个 cache key 对应的缓存条目。
所谓“批量清理”,是通过外部逻辑实现的模拟效果,不是模块内置能力。
真正可行的批量清理方式有两类:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
-
脚本驱动的并发 purge 调用
从数据库、CMS 或配置中心获取需清理的路径列表(如/api/v1/posts/101,/api/v1/posts/102),构造完整 URL(含 host、query string),并发发送 PURGE 请求:- Python 示例:用
aiohttp或requests-futures并发请求 - Bash 示例:配合
parallel或xargs -P - 关键:每个请求的 URI 必须与原始
proxy_cache_key完全一致(比如$host$request_uri,那 purge 就得带全 query)
- Python 示例:用
-
伪通配符 + map 白名单 + 后端配合
不靠 Nginx 自动匹配,而是由业务系统提前预知可枚举路径规则:- 在 nginx.conf 中用
map定义允许 purge 的路径模式(如~^/static/css/.*\.css$ 1) - 清理脚本调用前,先查出所有匹配该模式的实际资源路径(例如从构建产物清单读取 CSS 文件名)
- 再逐个触发 purge,本质仍是单点操作,但逻辑上构成“按前缀批量”
- 在 nginx.conf 中用
注意几个硬性限制:
-
proxy_cache_purge不识别*、**、正则或路径前缀;/purge/api/v1/*这类写法无效 - 若原始缓存 key 包含
$args,而 purge 请求没带参数(或参数顺序/编码不同),就清不掉 - 没有“删除目录下所有缓存”的原子操作,磁盘文件也不会立刻物理删除,只是标记失效
如果需要真正意义上的通配清理或异步广播式全网刷新,必须在 Nginx 上层加调度层:比如用消息队列通知各边缘节点,或通过服务发现自动向全部 Nginx 实例分发 purge 请求。
不复杂但容易忽略。

















