open_file_cache通过缓存文件元数据显著提升高频静态资源配置项读取性能,避免重复系统调用;核心参数包括max、inactive、valid、min_uses和errors;需按资源类型差异化配置,并可通过lsof、strace等验证效果。
直接用 open_file_cache 缓存文件元数据,而不是反复调用系统接口读取文件状态和内容——这是优化高频静态配置项(如频繁访问的 JS/CSS/图片、证书、密钥、配置片段等)读取性能最有效的方式。
当 Nginx 每次响应请求都要打开、检查、读取同一个静态文件(比如 logo.png 或 app.css),操作系统会反复执行 stat()、open()、read() 等系统调用。这些操作虽小,但在高并发下会成为瓶颈。open_file_cache 把文件描述符、最后修改时间、权限、大小等元数据缓存在内存中,后续请求可直接复用,省去磁盘 I/O 和内核态开销。
在 http 块中启用并调优:
不是所有静态资源都适合统一缓存。建议分场景控制:
inactive 时间(如 120s)open_file_cache off;
open_file_cache_valid 足够短(如 10s),便于快速感知证书轮换重启 Nginx 后,可通过以下方式确认:
lsof -p $(pgrep nginx) 查看 worker 进程打开的文件数是否趋于稳定(不再随请求数线性增长)strace -p $(pgrep nginx) -e trace=open,stat 观察系统调用频率明显下降open() "/path/to/file" failed (2: No such file or directory) 且后续不再重复出现,说明 open_file_cache_errors on 已起作用不复杂但容易忽略。它不改变响应内容,却能让万级 QPS 下的文件访问延迟下降 30% 以上。