inactive 是缓存驻留容忍期而非有效期,每次命中重置计时器,超时且无活跃请求时由 cache manager 异步清理;需配合 max_size、keys_zone 等参数闭环配置。

inactive 参数是 Nginx 清理冷缓存最直接的机制——它不看响应头是否过期,也不管请求频率高低,只认一个标准:这个缓存项最后一次被成功命中后,已经闲置多久了。只要超时,就会被后台 cache manager 进程扫描标记并异步删除。
理解 inactive 的真实含义
它不是“缓存有效期”,而是“缓存驻留容忍期”:
- 每次 proxy_cache hit 都会重置该缓存项的最后访问时间计时器
- cache manager 默认每秒扫描一次共享内存,检查 last_access_time + inactive 是否已过期
- 只有满足“超时 + 当前无活跃请求占用”两个条件,才真正触发清理
- 清理是异步的,不影响正在服务的请求
按资源类型设置合理值
不能统一设为 10m 或 1h,必须匹配实际访问节奏:
- API 配置类、管理后台页(更新少、访问稀疏):inactive=24h
- 博客/文档页、技术手册(长尾流量明显):inactive=7d~30d
- 日志归档页、法规 PDF、历史版本接口:inactive=90d
- 新闻/活动页(热度集中于 1–3 天):inactive=1d~2d
- 静态资源(JS/CSS/图片):inactive=30d,更新不频繁但复用高
必须配合的关键参数
单独调大 inactive 不起作用,需形成闭环配置:
- max_size:设为磁盘硬上限(如 5g / 20g),当空间逼近该值时,Nginx 优先淘汰最久未访问条目,这是第一级空间回收
- keys_zone 大小:inactive 时间越长,key 元信息驻留越久。估算公式:1MB ≈ 8000 个 key;例如 inactive=30d 且预期 24 万个缓存项,建议 keys_zone ≥ 30m
- use_temp_path=off:关闭临时路径,避免 rename 残留导致清理延迟或误判
- inactive ≥ proxy_cache_valid:例如 proxy_cache_valid 200 2h,则 inactive 至少设为 2h 或 4h,否则缓存“有效但不存活”
典型配置示例
适用于文档库类长尾场景:
proxy_cache_path /var/cache/nginx/docs levels=1:2 keys_zone=docs_cache:30m inactive=30d max_size=10g use_temp_path=off;说明:
- 缓存键存在 30MB 共享内存中,可容纳约 24 万个 key
- 任意缓存项连续 30 天未被命中,就会被标记清理
- 总磁盘使用不超过 10GB,超限时自动按 last_access_time 从最早开始释放











