open_file_cache需四条指令成组配置:open_file_cache max=5000 inactive=60s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on;仅缓存元数据,不适用proxy_pass。

在 Server 块中配置 open_file_cache,核心是缓存文件句柄和元数据(如大小、修改时间、存在性),从而避免每次请求都执行 stat() 和 open() 系统调用。这对高并发下小文件多的静态服务(如图标、CSS、JS)特别有效。
关键指令必须配齐
单独写 open_file_cache max=5000 inactive=60s; 不够,容易导致缓存失效不及时或污染。以下四条应成组出现:
-
open_file_cache:启用并设容量与淘汰策略,例如
max=5000 inactive=60s -
open_file_cache_valid:定期校验缓存有效性,建议设为
30s(略短于inactive) -
open_file_cache_min_uses:防爬虫或临时路径刷缓存,设为
2表示同一文件 60 秒内至少访问两次才进长效缓存 - open_file_cache_errors:开启后会缓存 404、403 等错误结果,避免反复试探无效路径
推荐 Server 块内配置示例
直接放在 server { ... } 块中即可生效(无需 reload 全局 http 块):
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
说明:
– max=5000 适合中等规模站点(如几千个常用静态文件)
– inactive=60s 是清理阈值,不是“过期时间”,未被访问就标记待删
– 若资源更新频繁(如带哈希戳的 JS),可在对应 location 中临时关闭:open_file_cache off;
配合系统层效果更稳
光靠 Nginx 配置还不够,建议同步检查:
- 文件系统挂载时加
noatime参数,防止每次读取都触发 atime 更新 - 确认磁盘 I/O 负载不高,否则缓存再好也受限于底层吞吐
- 用日志字段
$open_file_cache_hits和$open_file_cache_misses监控命中率,持续调优
注意作用范围和限制
open_file_cache 只缓存元数据,不缓存文件内容;它对 location 中匹配到的静态文件路径生效(比如 location /static/ 或正则匹配 \.js$);不适用于代理转发(proxy_pass)场景——那是 proxy_cache 的事。


















