inactive 是 Nginx 清理冷数据的核心参数,按最后一次命中重置计时器,由 cache manager 每 200ms 扫描并满足无活跃引用等条件后异步清理,需配合 max_size、keys_zone 等参数才能闭环生效。

inactive 参数是 Nginx 清理长期无人访问冷数据最直接、最可靠的方式——它不看响应头是否过期,也不管请求多频繁,只盯住一个事实:这个缓存项最后一次被成功命中后,已经闲置多久了。
它不是缓存有效期,而是缓存驻留容忍期。只要超时且无活跃引用,就会被后台进程标记并异步清理。
inactive 的真实触发逻辑
每次 proxy_cache hit(包括正常命中或 stale 状态下启用 proxy_cache_use_stale)都会重置该缓存项的 last_access_time 计时器。
cache manager 进程默认每 200ms 扫描一次共享内存,检查是否满足:
– last_access_time + inactive ≤ 当前时间
– 当前没有请求正在读取或写入该缓存项
两项同时成立,才真正触发清理(先删内存索引,再择机删磁盘文件)。
按内容冷热节奏设值,避免一刀切
- 新闻/活动页(热度集中于 1–3 天):inactive=1d~2d
- 博客文章、文档页、技术手册(长尾明显):inactive=7d~30d
- 静态资源(JS/CSS/图片,更新少但复用高):inactive=30d
- API 配置类、管理后台页(更新少、访问稀疏):inactive=24h
- 灰度接口、测试路径(生命周期短):inactive=10m~30m
必须配合的关键参数才能闭环生效
-
max_size 必须显式设置:例如
max_size=10g。否则 cache manager 不会主动触发磁盘级清理,inactive 标记的冷数据可能长期滞留 -
keys_zone 要够大:估算公式为 1MB ≈ 8000 个 key;若预期有 30 万个缓存项且 inactive=30d,建议
keys_zone ≥ 36m - use_temp_path=off 推荐开启:避免临时文件 rename 残留导致 inactive 判定延迟或失效
-
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;
这套组合能确保:每月仅查一次的 PDF 文档稳定留在缓存中;连续 30 天未被访问的旧页面自动退场;总磁盘占用不会突破 10GB。


















