open_file_cache_valid定义nginx定期校验缓存元数据的时间间隔,而非文件描述符有效期;其作用是定时stat检查文件存在性与修改状态,确保缓存准确性;缓存条目存活时长由inactive参数决定,二者需协同配置以平衡准确性和内存占用。

open_file_cache_valid 并不定义“文件描述符缓存的时效”,它定义的是 Nginx 主动检查缓存条目元数据(如文件是否存在、是否被修改)的时间间隔。
文件描述符(fd)本身在内核中由操作系统管理,Nginx 不控制其生命周期;它只缓存 fd 及关联的元数据(大小、mtime、权限、存在性等),并靠 inactive 参数决定该缓存条目在无访问时多久被移出缓存——这才是真正影响“缓存存活时间”的参数。
open_file_cache_valid 的作用是:
每过设定的时间(比如 30s),Nginx 会挑出部分缓存条目,对对应路径执行一次轻量级 stat() 系统调用。
- 若发现文件已被删除、权限变更或内容更新(inode/mtime 变化),就将该缓存条目标记为“过期”;
- 下次请求到来时,才会重新
open()和stat(),刷新缓存; - 如果没触发校验,即使文件已变,缓存仍可能返回旧信息——直到下一次
valid周期到来。
所以关键要明白:
-
缓存条目能“活多久”,取决于
inactive(空闲超时); -
缓存内容“准不准”,取决于
valid(校验频率); - 二者必须协同:若
valid太长,可能长时间返回错误或过期响应;若inactive太短,很多条目根本等不到校验就被淘汰,valid形同虚设。
常见合理搭配:
- 静态资源分钟级更新 →
valid 30s+inactive 60s - 版本化哈希文件(几乎不变)→
valid 120s+inactive 300s - 秒级热更场景 →
valid 10s,同时确保inactive ≥ 30s,且min_uses ≥ 2
它不涉及日志句柄、不控制 fd 关闭时机、也不缓存文件内容。只是一个“定时复核员”,确保缓存元数据不过期。











