worker_rlimit_nofile 在 main 块中为每个 worker 进程设置文件句柄软限制,需配合系统 limits、systemd 配置及 events 块中 worker_connections 使用,且后者不得超过前者值。

通过 worker_rlimit_nofile 在 Nginx 全局块(即 main 块)设置,可以提升单个 worker 进程能打开的最大文件句柄数(file descriptor),从而支撑更高并发连接。这个指令不作用于整个 Nginx 进程,而是为每个 worker 子进程单独设定软限制(soft limit),内核会据此分配资源。
理解 worker_rlimit_nofile 的作用范围
该指令必须写在 nginx.conf 的最外层(events、http 上方),属于 main 上下文。它只影响后续 fork 出的 worker 进程,不影响 master 进程,也不改变系统级硬限制(hard limit)。实际生效值受两个约束:
- 不超过系统允许的硬限制(可通过
ulimit -Hn查看) - 不超过内核参数
fs.nr_open的全局上限
正确配置方法与常见组合
在 nginx.conf 开头添加:
worker_rlimit_nofile 65535;
同时需配套调整:
-
系统级限制:修改
/etc/security/limits.conf,为 nginx 用户(如www-data或nginx)添加:
nginx soft nofile 65535<br>nginx hard nofile 65535
-
systemd 服务(如使用):编辑
/etc/systemd/system/nginx.service.d/override.conf,加入:
[Service]<br>LimitNOFILE=65535
之后重载 systemd 并重启 Nginx。
验证是否生效
重启 Nginx 后,查任意一个 worker 进程的 limits:
ps -eo pid,comm | grep 'nginx: worker' | head -1 | awk '{print $1}' | xargs -I{} cat /proc/{}/limits | grep "Max open files"
输出中应显示 65535(软限制)和对应硬限制值。若仍为默认(如 1024),说明系统级配置未生效或用户未正确加载。
配合 events 块优化连接处理
worker_rlimit_nofile 单独设置只是前提,还需确保 events 块中 worker_connections 不超过该值:
events {<br> worker_connections 65535;<br>}
否则即使句柄上限提高,Nginx 也不会尝试建立更多连接。注意:max_clients = worker_processes × worker_connections,总连接数不能超过 worker_rlimit_nofile 设置值(因为每个连接至少占用 1 个 fd,还有日志、上游等额外开销)。










