源码安装 nginx 时需确保编译启用 linux epoll 事件模型,并配合 worker_processes auto、worker_connections 10240、use epoll 等运行时配置及系统级 ulimit 和内核参数调优,才能真正发挥高并发异步能力。

源码安装 Nginx 时要启用真正支持高并发的异步文件轮询机制,关键不是“配置一个开关”,而是确保编译时正确启用了 Linux 下的 epoll 事件模型,并配合合理的运行时参数。Nginx 默认在 Linux 上就优先使用 epoll,但前提是系统环境和编译选项没破坏这个行为。
确认系统支持 epoll 并启用事件驱动
Nginx 的异步非阻塞能力依赖操作系统内核的 I/O 多路复用机制。在现代 Linux(2.6+)上,epoll 是默认且最优选择。无需额外模块,只要满足以下条件:
- 目标服务器是 Linux 系统(非 Windows 或旧版 CentOS 5)
- 内核版本 ≥ 2.6.17(基本所有生产环境都满足)
- 编译时未显式禁用事件模块(如未加
--without-epoll_module这类不存在的选项,实际 Nginx 不提供禁用 epoll 的 configure 参数)
源码编译时的关键 configure 选项
虽然 epoll 是自动启用的,但以下选项能强化高并发下的事件处理能力:
-
--with-http_v2_module:启用 HTTP/2,减少连接数,提升复用效率 -
--with-stream和--with-stream_ssl_module:若需 TCP/UDP 层代理,也走 epoll 事件循环 - 避免使用
--with-select_module或--with-poll_module:它们性能远低于 epoll,仅用于兼容极老系统 - 确保已安装
libpcre、zlib、openssl:缺失会影响 SSL/TLS 和正则功能,间接拖慢请求处理链
nginx.conf 中匹配高并发的 worker 配置
编译只是基础,真正发挥 epoll 异步能力靠运行时配置:
-
worker_processes auto;:让 Nginx 自动匹配 CPU 核心数,每个 worker 独立运行 epoll 循环 -
worker_connections 10240;:单个 worker 最大并发连接数,建议设为系统ulimit -n值的 70%~90% -
use epoll;:显式声明(可选但推荐),避免运行时因环境误判 fallback 到 poll/select -
multi_accept on;:允许一个 worker 在一次 epoll 事件中接收多个新连接,降低延迟 -
events { ... }块必须存在且不为空,否则 Nginx 启动会报错
系统级调优不可跳过
即使 Nginx 编译和配置都正确,若系统限制太严,epoll 也无法承载高并发:
- 执行
ulimit -n 65536并写入/etc/security/limits.conf持久化 - 调大内核参数:
net.core.somaxconn = 65535、net.ipv4.ip_local_port_range = 1024 65535 - 关闭 swap(
swapoff -a):防止 worker 进程被换出,影响响应实时性











