nginx.conf 中必须配置 worker_rlimit_nofile 才能使 nginx worker 进程使用高文件描述符上限,该指令需置于全局顶层作用域,其值不可超过系统对 nginx 用户的 hard nofile 限制,且需与 worker_connections 合理配比,并配合 open_file_cache 降低 fd 消耗。

Nginx 的 nginx.conf 文件本身不能设置系统级文件描述符限制,它只能配置 Nginx 进程自身能使用的 FD 上限——也就是告诉每个 worker 进程“最多允许打开多少个文件描述符”。真正的系统级限制(如 fs.file-max、用户 ulimit、systemd 服务限制)必须在操作系统层面单独调整。
但 nginx.conf 中有一项关键配置,是打通整条 FD 链路的最后一环且必不可少:
在 nginx.conf 全局块中设置 worker_rlimit_nofile
这个指令必须写在 events 块之外、http 块之外的顶层作用域(即与 user、worker_processes 同级):
user nginx;
worker_processes auto;
worker_rlimit_nofile 65535; # ← 关键:声明每个 worker 进程的 FD 上限
events {
worker_connections 16384; # 建议 ≤ worker_rlimit_nofile × 0.7~0.9
}
⚠️ 注意:
-
worker_rlimit_nofile的值不能超过你为 nginx 用户或服务设置的 hard nofile 限制(来自 limits.conf 或 systemd),否则会被截断; - 它不改变系统全局
fs.file-max,也不影响其他进程,只对 Nginx worker 生效; - 如果没配这一项,即使系统给了 65535 FD,Nginx 默认仍按较低值(通常是 1024)运行。
worker_connections 和 worker_rlimit_nofile 的关系要合理
例如:
- 设
worker_rlimit_nofile 131072→worker_connections最好设为90000左右(留出约 30% 余量给日志、SSL、upstream 连接等); - 若启用了
open_file_cache,还能进一步降低实际 open/close 频次,缓解 FD 压力。
配合使用 open_file_cache(小文件场景特别有用)
在 http 块中添加:
open_file_cache max=65536 inactive=60s; open_file_cache_valid 60s; open_file_cache_min_uses 2; open_file_cache_errors on;
这能显著减少频繁打开静态小文件带来的 FD 消耗。
不复杂但容易忽略











