worker_rlimit_nofile必须与ulimit -n软限制严格一致,否则高并发时触发“too many open files”导致502错误;需同步配置limits.conf或systemd limitnofile,并确保worker_connections≤该值的70%~80%。

Nginx 的 nginx.conf 中不少关键参数不是孤立生效的,它们必须与操作系统底层限制协同配置,否则容易出现连接失败、502 错误、请求被拒绝等问题。理解这些映射关系,是稳定支撑高并发的基础。
worker_rlimit_nofile 与 ulimit -n 必须一致
这个参数直接控制每个 Nginx 工作进程能打开多少文件描述符(包括 socket 连接、日志文件、配置文件等)。
它的值不能超过系统对单个进程设置的软/硬限制(即 ulimit -n 的输出值)。
- 如果
ulimit -n是 65535,worker_rlimit_nofile就应设为65535; - 若设为 10240 而实际
ulimit -n是 65535,Nginx 不会报错,但高并发时某些 worker 可能突破该限制,触发Too many open files,进而返回 502; - 修改后需在启动 Nginx 前,确保运行用户(如
www或nginx)的 shell 会话已通过/etc/security/limits.conf或 systemd service 文件设置了对应nofile限制。
worker_processes 与 CPU 核心数存在实践匹配关系
worker_processes 数量影响调度效率和资源争用:
- 设为
auto最稳妥,Nginx 会自动读取sysconf(_SC_NPROCESSORS_ONLN)获取在线 CPU 核心数; - 手动设置时建议等于物理核心数(非超线程逻辑核),尤其在 CPU 密集型场景(如大量 TLS 握手、gzip 压缩)下,过多进程反而引发上下文切换开销;
- 在容器环境中,若 cgroups 限制了 CPU 配额(如
--cpus=2),也应相应调低worker_processes,避免“争不到时间片却占着连接”。
worker_connections 与系统级网络连接能力相关联
本文档主要讲述的是Android 操作系统的介绍;Android是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统,早期由Google开发,后由开放手持设备联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以Java编写。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
该值乘以 worker_processes 得出理论最大连接数(max_clients),但它受限于:
- 每个连接占用一个文件描述符 → 受
worker_rlimit_nofile和ulimit -n约束; - 系统全局端口范围(
net.ipv4.ip_local_port_range)影响主动连接上限; - TIME_WAIT 连接堆积可能耗尽本地端口 → 需配合
net.ipv4.tcp_tw_reuse = 1和net.ipv4.tcp_fin_timeout调优; - 实际可用连接还取决于内存(每个连接约占用几 KB 内存)、网络队列(
net.core.somaxconn应 ≥listen指令的backlog值)。
sendfile 与内核版本及文件系统特性有关
启用 sendfile on 依赖 Linux 内核的 sendfile() 系统调用:
- 要求内核 ≥ 2.4,且目标文件系统支持(ext4/xfs 通常支持,某些网络文件系统如 NFSv3 可能不完全兼容);
- 若静态文件显示异常(如图片加载不全),可能是
sendfile与特定存储后端或加密文件系统冲突,此时应设为off并改用aio+directio组合; - 启用时还需确认
tcp_nopush on已开启,让内核把响应头和第一个数据包合并发送,减少小包数量。
events.use 与操作系统 I/O 多路复用机制强绑定
use epoll(Linux)、use kqueue(FreeBSD/macOS)、use /dev/poll(Solaris)并非可随意切换的选项:
- 编译 Nginx 时若未启用对应模块(如
--with-poll_module),运行时指定会报错; - Linux 2.6+ 默认支持
epoll,性能远超select/poll,无需手动指定也能自动选用; - 在容器中运行时,若宿主机内核较老(如 CentOS 6 的 2.6.32),仍可用
epoll,但需避免使用EPOLLEXCLUSIVE等新特性; -
rtsig已废弃,现代系统不应再用。










