nginx缓存自动清理由inactive参数控制,定义未被访问时间阈值(如inactive=2h),而非逻辑过期时间;manager_sleep和manager_files仅调节清理节奏;proxy_cache_valid仅决定响应是否命中缓存。

nginx 中没有“自动清理过期缓存”的阈值参数——因为缓存是否被物理删除,不取决于它是否“过期”,而取决于它是否“冷”。真正起作用的是 inactive 参数,它是 proxy_cache_path 唯一控制磁盘文件自动清理的原生机制。
inactive 是核心淘汰条件
它定义:一个缓存条目在多长时间内未被任何请求命中(即最后访问时间 atime),就可被 cache manager 进程从磁盘上删除。
- 例如
inactive=2h:该缓存只要连续 2 小时没被访问过,就标记为可清理 - 它不看 Cache-Control、Expires 或 proxy_cache_valid 设置的逻辑过期时间
- 哪怕一个缓存已逻辑过期 1 天,只要刚被 hit 过,就不会删
- 不设 inactive,缓存文件会一直留在磁盘上,哪怕长期不用
manager_sleep 和 manager_files 控制清理节奏
这两个参数不决定“删不删”,而是影响“怎么删得更稳”:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
-
manager_sleep=100:每轮清理后休眠 100 毫秒再继续扫描 -
manager_files=500:每轮最多检查并清理 500 个缓存文件 - 调小 sleep + 调大 files → 清理更积极,适合 SSD 和中小缓存规模
- 默认值(200ms / 200 文件)适合通用场景,一般无需调整
配合 proxy_cache_valid 明确逻辑有效期
虽然它不触发删除,但决定了 Nginx 是否返回缓存、是否走后台校验:
-
proxy_cache_valid 200 301 302 10m;:状态码为 200/301/302 的响应,逻辑缓存 10 分钟 -
proxy_cache_valid 404 1m;:404 响应只缓存 1 分钟 -
proxy_cache_valid any 30s;:兜底策略,其他状态码统一缓存 30 秒
实际配置示例
一个兼顾空间回收与稳定性的典型写法:
proxy_cache_path /var/cache/nginx/static_cachelevels=1:2 keys_zone=static_cache:20m
max_size=500m inactive=2h
manager_files=300 manager_sleep=150
use_temp_path=off;
其中:
– inactive=2h 确保冷数据及时释放空间
– max_size=500m 配合 inactive,在空间不足时加速淘汰
– use_temp_path=off 避免临时文件写入带来额外 I/O










