关键在于分层优化网络层、应用层和系统层:网络层通过http/2/3、keepalive调优及tcp参数提升连接效率;应用层优化worker调度、缓冲区、缓存与压缩;系统层突破文件描述符限制、优化io调度与磁盘配置。

直接从网络层、应用层到系统层打通优化链路,是让 Nginx 真正扛住高并发的关键。不是堆参数,而是分层对齐瓶颈——哪一层卡住,就重点调哪一层。
网络层:减少连接开销,加速数据流转
网络层优化聚焦 TCP 协议栈与连接复用,目标是降低建连耗时、提升吞吐密度。
- 启用 HTTP/2 或 HTTP/3:多路复用避免队头阻塞,尤其适合小资源密集型页面;需配合 TLS 1.3 使用以降低握手延迟
-
调优 keepalive:前端连接设
keepalive_timeout 60s; keepalive_requests 1000;,后端 upstream 配keepalive 64;+proxy_http_version 1.1;+proxy_set_header Connection "";,复用长连接,省去反复三次握手和 TIME_WAIT 消耗 -
调整内核 TCP 参数:在
/etc/sysctl.conf中增强连接承载能力:net.core.somaxconn = 65535(监听队列上限)net.ipv4.tcp_max_syn_backlog = 65535(SYN 半连接队列)net.ipv4.ip_local_port_range = "1024 65535"(扩大可用端口池)net.ipv4.tcp_fin_timeout = 30(加快 FIN 回收)
应用层:精控 Nginx 行为,榨干单机处理力
这是最常被改动也最容易见效的一层,核心是让每个请求的路径更短、缓存更准、压缩更省。
-
Worker 进程精准调度:用
worker_processes auto;自动匹配 CPU 核数,搭配worker_cpu_affinity auto;实现进程与物理核心绑定,减少跨核缓存失效和上下文切换 -
连接与缓冲区协同配置:设
worker_connections 10240;,同时配worker_rlimit_nofile 65535;并确保系统级 ulimit 已同步(* soft nofile 65535写入/etc/security/limits.conf);请求头/体缓冲设为client_header_buffer_size 4k;和client_body_buffer_size 16k;,避免频繁磁盘暂存 -
动静分离 + 多级缓存:静态资源走
location ~* \.(js|css|png|jpg|gif)$ { expires 30d; add_header Cache-Control "public"; };反向代理启用proxy_cache,路径、keys_zone、inactive 时间按业务热度设定(如热点接口缓存 1 小时,冷数据 10 分钟) -
Gzip/Brotli 压缩合理启用:开启
gzip on;,设gzip_comp_level 3;(兼顾速度与压缩率),限定类型gzip_types text/plain text/css application/json application/javascript;,避免压缩已压缩文件(如图片、视频)
系统层:夯实底层支撑,释放硬件潜能
系统层不是“配完就完”,而是让 Nginx 跑在它该跑的环境里——文件句柄够用、IO 调度合理、磁盘响应及时。
-
突破文件描述符限制:Nginx 每个连接占 1–2 个 fd,万级并发至少需 65535。除 ulimit 配置外,检查 systemd 服务是否覆盖限制(
LimitNOFILE=65535加入/etc/systemd/system/nginx.service.d/override.conf) -
选用高效 IO 调度器:SSD 场景推荐
none(禁用调度)或kyber;HDD 可用deadline。通过cat /sys/block/nvme0n1/queue/scheduler查看,用echo none > /sys/block/nvme0n1/queue/scheduler临时生效 -
文件系统与磁盘优化:使用 XFS 或 ext4(开启
dir_index和lazy_itable_init);Nginx 缓存目录挂载加noatime,nodiratime减少元数据写入;若用机械盘,避免与日志盘共用同一物理设备 -
关闭非必要服务与干扰:停用 NetworkManager(改用 systemd-networkd)、禁用 transparent_hugepage(
echo never > /sys/kernel/mm/transparent_hugepage/enabled),防止内存抖动影响 Nginx 稳定性











