要让nginx高并发稳定运行,必须同步优化系统限制、内核参数和nginx配置三层:先调大nofile限制,再配置somaxconn、tcp_tw_reuse等内核参数,最后设置worker_connections、epoll、keepalive等nginx参数,并区分静态资源与api的缓存及超时策略。

要让 Nginx 在高并发环境下稳定扛住数万甚至百万级连接,不能只改几个配置项。关键在于打通“系统限制—内核参数—Nginx 自身配置”三层链路,缺一不可。单改 worker_connections 而不放开文件描述符,或开了 epoll 却没调 somaxconn,都容易卡在入口就丢请求。
系统级资源限制必须先放开
Linux 默认对每个进程最多打开 1024 个文件(含 socket),而一个 worker 进程就要处理上万连接。不调这个,Nginx 再怎么配都白搭。
- 编辑
/etc/security/limits.conf,追加两行:* soft nofile 65535* hard nofile 65535 - 如果是专用 nginx 用户(如
nginx),建议写成:nginx soft nofile 1000000nginx hard nofile 1000000 - 生效方式:重新登录终端,或重启 nginx 服务(
systemctl restart nginx)
内核网络参数要同步加固
系统能打开多少连接、TCP 握手队列有多深、TIME_WAIT 是否可复用,全由内核控制。这些参数不调,Nginx 会频繁遇到 “Connection refused” 或请求堆积在 SYN_RECV 状态。
- 修改
/etc/sysctl.conf,加入以下内容:net.core.somaxconn = 65535net.ipv4.tcp_tw_reuse = 1net.ipv4.ip_local_port_range = 1024 65000net.ipv4.tcp_fin_timeout = 15net.ipv4.tcp_max_syn_backlog = 8192 - 执行
sysctl -p立即加载生效 - 特别注意:
tcp_tw_reuse和ip_local_port_range配合使用,才能缓解短连接场景下的端口耗尽问题
Nginx 主配置需精细化协同
这一层是直接面向业务的调整,所有参数必须彼此匹配,否则会出现“配置了万级连接却报错 open too many files”这类典型问题。
-
进程与资源上限:
worker_processes auto;worker_rlimit_nofile 100000;
确保worker_rlimit_nofile ≥ worker_connections × worker_processes -
事件模型与连接能力:
events {use epoll;worker_connections 10240;multi_accept on;} -
连接复用与传输效率:
keepalive_timeout 65s;keepalive_requests 10000;sendfile on;tcp_nopush on;tcp_nodelay on;
静态与动态响应要区别对待
不是所有请求都该走同一套策略。API 接口和静态资源的优化重点完全不同。
- 对图片、JS、CSS 等静态资源,加缓存头:
location ~* \.(js|css|png|jpg|gif)$ {expires 30d;add_header Cache-Control "public, immutable";} - 对 API 接口,缩短 keepalive 并关闭不必要的压缩:
location /api/ {keepalive_timeout 30s;gzip off;} - 大请求体需放宽限制:
client_max_body_size 100m;client_header_buffer_size 4k;large_client_header_buffers 8 16k;











