Nginx 通过 proxy_cache_path 的 inactive 参数实现冷数据自动清理,其本质是“最后访问容忍期”,需配合 max_size、keys_zone 和 use_temp_path=off 使用,按业务设定合理值,如文档页设为 30d。

直接在 proxy_cache_path 里设 inactive 就行,这是 Nginx 原生支持、最稳妥的冷数据自动清理方式——它不依赖响应头过期时间,也不需要额外模块或脚本,只看缓存项最后一次被命中后闲置了多久。
inactive 的真实作用机制
它不是“缓存有效期”,而是“最后访问容忍期”:
- 每次成功命中(包括
HIT或启用proxy_cache_use_stale后的STALE返回)都会重置该缓存项的最后访问时间 -
cache manager进程默认每 200ms 扫描一次共享内存,检查是否满足last_access_time + inactive - 满足条件且当前无活跃请求占用时,先从共享内存中移除 key 索引,再在后续扫描或磁盘空间压力(如
max_size触发)时物理删除文件
必须配合的关键参数
单独设 inactive 效果有限,需同步配置:
-
max_size:必须显式设置(如max_size=5g),否则cache manager不会主动执行磁盘级清理,冷文件可能长期滞留 -
keys_zone:要足够大。每 1MB 共享内存约支持 8000 个 key;若预计有 40 万个缓存项,keys_zone至少设为50m -
use_temp_path=off:避免临时文件写入影响性能和清理一致性
按业务场景设合理的 inactive 值
不能一刀切,要匹配实际访问衰减节奏:
阿里百炼大模型平台多人共享账号用量统计代理服务。解决公司共用账号时无法区分个人用量的问题。适用场景:1)部署用量统计代理;2)统计多人Token用量和调用次数;3)管理大模型API调用配额。
- 静态资源(JS/CSS/图片):
inactive=1h~6h—— 热门常驻,冷门几小时无访问就释放 - API 列表页、详情页:
inactive=12h~24h—— 覆盖夜间低谷,兼顾复用与回收 - 文档页、旧博客、PDF 归档:
inactive=7d~30d—— 长尾内容月均访问几次,设太短等于白缓 - 灰度页、临时活动页:
inactive=10m~30m—— 快速回收,防止残留干扰测试
典型配置示例
一个面向文档站点的稳定配置:
proxy_cache_path /var/cache/nginx/doc_cache levels=1:2 keys_zone=doc_cache:30m max_size=10g inactive=30d use_temp_path=off;说明:30 天内未被任何请求命中的缓存项,会被 cache manager 自动淘汰;keys_zone=30m 支持约 24 万个 key,max_size=10g 确保磁盘空间可控。










