nginx后端连接池需同时配置upstream keepalive、proxy_http_version 1.1和proxy_set_header connection ""三要素;keepalive值应按后端并发能力与worker数合理设置,并配合keepalive_timeout、keepalive_requests及系统级内核参数调优。

后端连接池必须配全三要素
要让 Nginx 真正复用到后端服务的 TCP 连接,仅在 upstream 块里写 keepalive 32 是无效的。必须同时满足以下三项,缺一不可:
-
upstream 块内声明 keepalive 数值:例如
keepalive 32;,表示每个 worker 进程对单台后端最多缓存 32 个空闲连接 -
location 或 server 块中启用 HTTP/1.1:添加
proxy_http_version 1.1;,否则默认以 HTTP/1.0 转发,后端不维持长连接 -
清除 Connection 请求头:添加
proxy_set_header Connection "";,避免透传客户端的Connection: close导致后端主动断连
这三项必须成对出现,漏掉任意一项,连接复用率趋近于零,后端 TIME_WAIT 持续堆积,QPS 上不去。
合理设置 keepalive 数值与超时参数
keepalive 不是越大越好,需结合后端承载能力和 Nginx worker 分布计算:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 若后端单实例最大支持 2000 并发连接,Nginx 有 4 个 worker 进程,建议设为
keepalive 32~48(2000 × 70% ÷ 4 ≈ 35) -
keepalive_timeout 30s;:空闲连接在连接池中最多保留 30 秒,该值必须小于后端服务的空闲超时(如 Tomcat 的connectionTimeout),否则 Nginx 想复用,后端已关闭 -
keepalive_requests 500;:单个长连接最多处理 500 次请求,避免连接“僵死”占用资源;高并发网关场景可调至 1000,静态资源或内网服务可放宽至 5000
客户端侧 Keepalive 需按场景精细控制
面向终端用户的 keepalive_timeout 和 keepalive_requests 应匹配访问特征,而非统一套用默认值:
- 移动端 API:设
keepalive_timeout 10s;,App 进入后台后快速回收连接,防 fd 耗尽 - 常规 Web 页面:推荐
keepalive_timeout 65s 60s;,第一个值为 Nginx 关闭空闲连接时间,第二个值写入响应头告知浏览器,适配主流浏览器默认策略 - 内网微服务通信或 SSE 流式接口:可设
keepalive_timeout 300s;,配合keepalive_requests 0;(不限请求数)实现长期连接复用 - 高并发短连接网关:建议
keepalive_timeout 3s;,快速释放连接,防止连接堆积
系统级配套调优不能遗漏
Nginx 层配置只是半程,Linux 内核参数必须同步调整,否则连接复用效果被抵消:
- 启用 TIME_WAIT 复用:
net.ipv4.tcp_tw_reuse = 1(tcp_tw_recycle已废弃,禁用) - 加速 TCP 握手:
net.ipv4.tcp_fastopen = 3 - 扩大连接队列:
net.core.somaxconn = 65535,并确保 Nginx 的listen ... backlog=65535 - 提升文件描述符上限:系统级
ulimit -n 1000000,Nginx 配置中加worker_rlimit_nofile 1000000; - CPU 绑定优化(可选):使用
worker_cpu_affinity auto;或显式绑定核心,减少上下文切换










