最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx Server 配置中优化连接池如何写
时间:2026-08-15 12:31:49 编辑:袖梨 来源:一聚教程网
要让Nginx真正复用后端连接,必须同时配置upstream的keepalive、location中proxy_http_version 1.1和proxy_set_header Connection "",以及keepalive_requests和keepalive_timeout参数,并验证ESTAB连接数稳定。
要让 Nginx Server 真正复用与后端的连接,不能只在 upstream 里写 keepalive 32,必须同步配齐协议、头部和连接池三要素。否则连接仍是短连,QPS 上升时后端 TIME_WAIT 暴涨、延迟升高。
upstream 块中声明 keepalive
该指令只能出现在 upstream 块内,且必须在 http 块下定义:
-
keepalive N表示每个 worker 进程最多为这台后端缓存 N 个空闲长连接;若有 4 个 worker 和 2 台后端,理论最大空闲连接数是4 × 2 × N - N 值建议按后端单实例稳定并发数 × 0.6~0.8 计算:Tomcat
maxConnections=200→ 设keepalive 120;Node.js 轻量服务可从32或64起步 - 不要写成全局值,它不是总连接数,而是每个 worker 对每台后端的独立连接池上限
location 中强制启用 HTTP/1.1 并清空 Connection 头
这两项必须同时存在,缺一不可:
-
proxy_http_version 1.1;—— 否则 Nginx 默认用 HTTP/1.0 向后端发请求,不支持复用 -
proxy_set_header Connection "";—— 注意是空字符串,不是"keep-alive",防止客户端传来的Connection: close被透传导致连接中断 - 别手动加
Keep-Alive头,Nginx 会根据连接池状态自动处理
控制单连接生命周期
仅管数量不够,还要管“一条连接能活多久、干多少事”:
-
keepalive_requests 500;—— 单个空闲连接最多转发 500 次请求后关闭,防后端状态泄漏;API 场景推荐500~2000 -
keepalive_timeout 20s;—— 空闲连接在池中最多保留 20 秒;应比后端空闲超时(如 Tomcat 的connectionTimeout)小 5~10 秒,避免持有已失效连接 - 这两个参数从 Nginx 1.15.3+ 才对 upstream 生效,老版本无效
验证是否真正生效
配置完必须实测,不能只看语法是否通过:
- 执行
ss -tnp | grep :8080 | grep ESTAB | wc -l(替换为你的后端端口),观察连接数是否稳定在预期附近,而非持续增长或剧烈抖动 - 压测对比开启前后:后端
TIME_WAIT数量、P95 延迟、建连耗时 - 用 curl 或浏览器检查后端响应头是否含
Connection: keep-alive;若返回close或缺失,说明后端未配合或中间设备(如 WAF)干扰