open_file_cache_valid 是 Nginx 每隔多久重新 stat() 缓存条目以确认文件状态,需按发布频率设为 10–20 秒(秒级热更)、30 秒(分钟级构建)、120–180 秒(版本化资源),并配合 min_uses 和 errors 参数协同调优。
open_file_cache_valid 不是“缓存多久过期”,而是 Nginx 每隔多久重新 stat() 一次缓存条目,确认文件是否还存在、权限是否变更、inode 是否被替换。它直接影响静态资源更新后的感知延迟和系统调用开销,调优必须结合业务发布节奏来定。
校验太慢 → 用户可能长期看到旧文件或 404;校验太快 → worker 进程 sys 时间飙升,I/O 压力增大。
nginx -t 和 top -p $(pgrep nginx) 中的 %sys 占比高频更新常伴随大量试探性请求(A/B 测试路径、调试临时文件、错误 URL),这些不该进缓存,否则会放大校验负担。
open_file_cache_min_uses 1:所有首次访问都缓存 → 缓存污染严重,valid 周期内反复校验无效路径open_file_cache_min_uses 2:两次访问才缓存 → 拦截约 60% 的单次请求,命中率不降,校验压力显著下降更新过程中容易出现权限错配(chown 遗漏)、路径错位(构建产物未解压)、软链接断裂等,导致 open() 或 stat() 失败。开启 open_file_cache_errors on 后,Nginx 会把 403/404 等错误结果也缓存 valid 时长。
log_format main '$status $request_filename $upstream_http_x_cache $time_local';
nginx -s reload,缓存清空重置,无需重启服务不同规模场景下,open_file_cache_valid 不孤立存在,需与其它参数协同:
open_file_cache max=100000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
open_file_cache max=500000 inactive=120s;
open_file_cache_valid 180s;
open_file_cache_min_uses 3;
open_file_cache_errors on;
可关闭该缓存:open_file_cache off;,避免额外管理开销