Skip to content
Nginx proxy_http_version 完整详解

一、proxy_http_version 是什么?

定义: 设置 Nginx 向后端服务器转发请求时使用的 HTTP 协议版本

只有两个可选值:

nginx
proxy_http_version 1.0;   # 默认
proxy_http_version 1.1;   # 手动开启

二、默认值:proxy_http_version 1.0(默认)

特点

  • 短连接
  • 每转发一次请求,就建立一次连接,请求结束立即关闭
  • 不支持长连接、不支持 pipeline、不支持 WebSocket

行为

  • 每次请求都会重新建立连接
  • 每次都会触发 upstream 重新负载均衡(轮询)
  • 不会粘住某一台后端

优点

  • upstream 轮询 100% 生效
  • 不会出现“只访问一台机器”的问题

缺点

  • 频繁建连,性能稍差

三、手动开启:proxy_http_version 1.1

特点

  • 支持长连接(keepalive)
  • 支持 WebSocket(必须 1.1)
  • 连接可以复用,不立即关闭
  • 性能更高

关键后果(你最关心的)

长连接 = 连接复用 = 绑定第一次选中的后端节点不再触发 upstream 轮询表现为:永远访问一台机器


四、proxy_http_version 1.1 必须配合的配置(缺一不可)

开启 1.1 后,必须配合以下头部,否则会出问题:

1. 长连接模式(普通接口用)

nginx
proxy_http_version 1.1;
proxy_set_header Connection "";

2. WebSocket 模式(必须这样写)

nginx
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

3. 想让长连接 不破坏轮询(必须加)

nginx
upstream backend {
    server 94:18043;
    server 95:18043;
    keepalive 16;  # 关键!管理连接池
}

五、proxy_http_version 影响负载均衡的真正原理(官方客观)

1. 使用 1.0(默认)

  • 每次请求 = 新连接
  • 每次新连接 = 重新负载均衡
  • 轮询一定生效
  • 不会粘节点

2. 使用 1.1 + 长连接

  • 第一次请求建立连接
  • 后续请求复用该连接
  • 复用连接 = 不会重新负载均衡
  • 表现为:永远访问一台机器

六、proxy_http_version 最全配置总结表

配置连接类型是否破坏轮询适用场景
proxy_http_version 1.0短连接不破坏,轮询正常普通接口、需要负载均衡的API
proxy_http_version 1.1 + Connection ""长连接破坏(连接复用)高性能接口
proxy_http_version 1.1 + upgradeWebSocket长连接严重破坏WebSocket、实时通信
proxy_http_version 1.1 + upstream keepalive连接池不破坏(均衡分发)生产级高性能负载均衡

七、最终官方结论(最客观)

  1. proxy_http_version 1.0 = 默认 = 短连接 = 负载均衡永远正常生效
  2. proxy_http_version 1.1 = 长连接 = 连接复用 = 可能不轮询
  3. 不是 upstream 坏了,是长连接导致不再重新选择节点
  4. WebSocket 必须用 1.1,所以一定粘节点
  5. 普通接口想保持轮询 → 不要开启 1.1