nginx 不支持 purger 指令,其自动物理清理仅依赖 proxy_cache_path 的 inactive 参数,该参数控制未被访问的缓存文件在指定时间后由 worker 自动删除;其他方式均为手动或辅助手段。

nginx 本身不提供自动清理过期缓存文件的机制,proxy_cache_path 的 purger 指令并不存在 —— 这是一个常见误解。nginx 官方配置指令中**没有 purger 这个参数**,也**不支持通过配置项直接触发物理删除过期缓存文件**。
为什么不存在 "purger" 指令?
nginx 的缓存管理基于两个核心机制:
-
主动过期(expiration):通过
proxy_cache_valid、Expires或Cache-Control响应头决定缓存是否“逻辑过期”; -
惰性淘汰(lazy revalidation):过期缓存不会被立即删除,而是在下次请求时检查后端响应(如使用
proxy_cache_revalidate on),再决定是否更新或保留。
也就是说:过期 ≠ 删除。缓存文件会一直留在磁盘上,直到被 inactive 时间淘汰,或由外部手段清理。
真正可用的物理清理方式
要实现“过期缓存文件的自动物理清理”,需组合以下机制:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
-
设置
inactive参数:在proxy_cache_path中指定缓存项在多长时间内未被访问就删除。例如:proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mycache:10m inactive=1h max_size=1g;
表示:1 小时内没被任何请求命中的缓存文件,会被 nginx worker 自动 unlink(物理删除)。 -
启用
proxy_cache_use_stale updating:避免因清理导致大量回源,提升平滑性。 -
定期运行
ngx_http_proxy_cache_purge模块(第三方):该模块提供proxy_cache_purge指令,支持按 key 主动清除(需手动触发或配合脚本/请求);但它仍不等于“自动扫描并删过期文件”,而是按需清除。 -
系统级定时清理(推荐补充):用
find配合缓存目录的 mtime/atime 清理陈旧文件(注意避免误删正在使用的文件)。例如:find /var/cache/nginx -type f -mmin +60 -delete(慎用,建议先-print测试)。
关键提醒:避免踩坑
以下做法不可靠或危险:
- 试图在配置中写
purger on或类似指令 → 配置校验失败,nginx 启动报错; - 仅依赖
max_size触发清理 → 这是 LRU 式空间回收,只在缓存满时才逐出“最久未用”的文件,与“是否过期”无关; - 用
rm -rf直接清空缓存目录 → 可能导致 nginx worker 访问已删文件,产生 warning 或 502;应使用nginx -s reload或让inactive机制安全处理。
小结:自动物理清理靠什么?
真正起作用的是 inactive 参数 —— 它是 nginx 原生支持、线程安全、无需额外模块的自动清理机制。只要合理设置其值(略大于业务最大容忍过期时间),就能在无外部干预下持续回收过期且冷门的缓存文件。其他方式都是辅助或主动干预手段,不能替代 inactive 的基础作用。










