nginx无自动过期清理机制,purger仅支持请求驱动的主动清除,不感知过期、不扫描磁盘、不支持定时;应依赖cache manager进程(默认启用)配合inactive参数,并辅以find+cron兜底清理。
nginx 本身不提供
的自动过期清理机制,
也不是 nginx 官方指令 —— 它是第三方模块
ngx_cache_purge
提供的功能,用于按 URL 主动清除缓存,**不支持定时、不扫描磁盘、也不自动识别“过期”文件**。因此,不能直接靠它实现“定时自动化
清理磁盘
过期文件”。
为什么 purger 无法自动清理过期缓存文件
purger 是请求驱动的主动清除机制
,不是后台守护进程或定时扫描器。它的作用是在收到特定 purge 请求(如
)时,根据 URI 匹配并删除对应缓存键的文件。它:
不感知缓存是否已过期(不读取
或响应头中的
/
)
不遍历 cache 目录扫描旧文件
不支持 cron 式调度,需外部触发
依赖手动构造 purge 请求或配合业务逻辑调用
真正可行的定时清理过期缓存方案
要实现“定时自动化清理磁盘上实际已过期的缓存文件”,应结合 nginx 缓存元数据与系统级工具。以下是可靠做法:
启用 cache manager 进程(默认开启)
:nginx 主进程会定期(默认每 0.5 秒)唤醒 cache manager 子进程,检查缓存项状态,自动删除过期、失效、临时或超限的缓存文件。这是最核心、最轻量的内置机制,无需额外配置,但需确保
中的
参数合理设置(例如
),否则长时间未被访问但未过期的文件不会被清理。
用 find + cron 清理物理残留(兜底)
:cache manager 可能因重启、异常中断等遗留已过期但未及时删除的文件。可写定时脚本,按缓存目录 mtime 或文件名时间戳清理:
注意:慎用
,建议先用
验证;避免匹配到
、
等控制文件。
监控 cache 使用率并触发清理(可选)
:通过
或解析
目录大小,当使用率超阈值(如 85%)时,运行
或发送信号重载 nginx(触发 cache manager 紧急扫描)。
如果仍想用 ngx_cache_purge 做“伪定时清理”
可通过外部调度间接模拟,但属于非标准用法,仅适用于有明确 URI 规律的缓存(如带时间戳路径):
编写脚本生成一批待 purge 的旧 URL(例如:过去 7 天的
)
用 curl 发送 purge 请求:
将脚本加入 crontab(如每天凌晨执行)
注意:该方式依赖 URI 可枚举、且 purge 模块已正确配置
本质上,nginx 缓存的生命周期管理应以
+ cache manager 为主,系统级定时扫描为辅。purger 是运维辅助手段,不是过期治理主力。
proxy_cache_pathpurgerGET /purge/xxxproxy_cache_validExpiresCache-Controlproxy_cache_pathinactiveinactive=12h# 示例:清理 /var/cache/nginx/proxy_cache 下 24 小时前创建且无有效锁的缓存文件
find /var/cache/nginx/proxy_cache -type f -mmin +1440 ! -name "*.*" -delete
-delete-ls.temp.piddf -h /var/cache/nginxproxy_cache_pathfind ... -delete/api/v1/data/YYYY/MM/DD/*curl -X PURGE "http://localhost/purge/api/v1/data/2024/04/01/item123"location ~ /purge(/.*)?inactive