要提升nginx并发能力,需协同配置客户端连接、代理连接和系统资源:合理设置keepalive_timeout(60s~75s)、keepalive_requests(1000或10000)及upstream keepalive(如32),并调优worker_connections、系统文件句柄与超时参数。

要通过长连接提升 Nginx 并发能力,关键不是单纯“打开 Keep-Alive”,而是协同配置客户端连接、代理连接、系统资源三者,避免单点瓶颈。重点在 keepalive_timeout、keepalive_requests 和 upstream keepalive 三个参数的合理搭配。
客户端到 Nginx 的长连接(前端连接)
这是用户浏览器或调用方与 Nginx 建立的 HTTP 连接,复用它能显著减少 TCP 握手开销:
-
keepalive_timeout:建议设为
60s~75s。太短(如 10s)导致频繁重连;太长(如 300s)会让空闲连接长期占着 worker_connections,尤其在突发流量后易堆积无效连接。 -
keepalive_requests:设为
1000或10000(高 QPS 场景)。达到该请求数后强制断开,可防止因长连接持续占用引发的内存缓慢增长或句柄泄漏。 - 无需额外开启指令,HTTP/1.1 默认启用 Keep-Alive;但确保响应头中未被上游或应用层主动禁用(如后端返回
Connection: close)。
Nginx 到后端服务的长连接(后端连接池)
这才是真正影响并发吞吐和后端负载的核心。默认情况下,Nginx 每次请求都新建后端连接,极易压垮后端:
- 在
upstream块中必须添加keepalive N(如keepalive 32),表示每个 worker 进程最多缓存 N 个空闲长连接到该 upstream 组。 - 配套启用 HTTP/1.1 和清除 Connection 头:
proxy_http_version 1.1;proxy_set_header Connection ""; - 推荐搭配
least_conn负载算法,避免连接集中在某台后端,尤其适合长连接场景下连接数分布不均的问题。
系统与 Nginx 进程级配合
再好的长连接配置,若底层资源不够,也会失效:
-
worker_connections需足够大(如65535),且worker_rlimit_nofile必须 ≥ 该值(如worker_rlimit_nofile 65535)。 - 操作系统层面同步调整:
–ulimit -n 65535(会话级)
–/etc/security/limits.conf中设置* soft nofile 65535和* hard nofile 65535
–/etc/sysctl.conf中设fs.file-max = 2000000,并执行sysctl -p - 使用
epoll事件模型 +multi_accept on,让单次唤醒尽可能多地接收新连接,降低延迟抖动。
超时参数需前后端对齐
长连接失效常源于超时错配:
- Nginx 的
keepalive_timeout(前端)应 小于 后端服务(如 Tomcat、Spring Boot)的连接超时(如connectionTimeout=90000)。 - 代理超时三项需合理:
proxy_connect_timeout 60s;(建连)proxy_send_timeout 300s;(发请求)proxy_read_timeout 300s;(等响应) 避免 Nginx 在后端还在处理时就主动断连。











