open_file_cache_min_uses 是准入门槛而非淘汰机制,需与 open_file_cache 和 open_file_cache_valid(或 inactive)协同:配置 inactive=60s、min_uses=2 时,仅当文件在60秒内被成功访问≥2次才写入缓存,首次访问走磁盘,单次或超时访问不入缓存,从而过滤带时间戳路径、404资源、爬虫扫描等冷数据。

设置 open_file_cache_min_uses 不是为了“淘汰”已缓存的冷数据,而是从源头阻止冷数据进入缓存 —— 它是一道准入门槛,不是清理开关。
它怎么防止冷数据进缓存
该参数必须配合 open_file_cache 和 open_file_cache_valid(或 inactive)一起生效。Nginx 会为每个文件在指定时间窗口内计数访问次数:
- 配置
inactive=60s; open_file_cache_min_uses 2;:表示一个文件需在最近 60 秒内被成功请求 ≥2 次,才被允许写入缓存 - 第 1 次访问:走磁盘
open()和stat(),不计入缓存,也不触发计数(除非开启open_file_cache_errors on且是错误路径) - 第 2 次访问(60 秒内):Nginx 才把其文件描述符、大小、修改时间等元数据写入缓存,后续请求直接复用
- 只访问 1 次,或两次间隔超过
inactive时间,就始终处于“未达标”状态,不会驻留缓存
哪些属于典型冷数据,靠 min_uses 能过滤
以下路径通常只被访问一次,设 min_uses 2 可自然跳过:
- 带时间戳或随机 hash 的资源(
/app.js?v=123456和/app.js?v=789012视为不同文件) - 404 页面对应的静态路径(如缺失的
/images/logo-404.png),尤其配合open_file_cache_errors off时 - 爬虫扫描的不存在路径(
/phpmyadmin/、/wp-admin/) - 调试接口或临时上传 URL(如
/uploads/tmp_abc123.jpg)
合理取值建议
数值不是越高越好,要匹配真实访问节奏:
- min_uses 2:通用推荐值。覆盖首页 HTML、核心 JS/CSS、favicon.ico 等用户刷新/返回时大概率复访的资源
-
min_uses 3:适合 CDN 回源节点、健康检查接口(如
/healthz每 10 秒一次)、构建产物中极少数全局 bundle - 避免设为 1:等于取消门槛,大量低频路径会挤占缓存空间,导致真正热资源被 LRU 提前淘汰
-
避免设为 ≥5:若
inactive较短(如 20s),真实热点也可能因访问分散而无法达标,反而降低复用率
配套必须启用的参数
单独改 min_uses 无效,需完整配置闭环:
-
open_file_cache max=10000 inactive=60s;:设定容量上限和观察窗口长度 -
open_file_cache_valid 30s;:每 30 秒校验缓存项是否仍有效(文件是否存在、是否被修改) -
open_file_cache_errors on;:让高频 404/403 也参与缓存(减少重复磁盘查询),但注意:错误响应的计数逻辑独立,需另行评估











