nginx高性能连接转发依赖keepalive连接池与合理超时、缓冲配置,而非轮询算法本身;需在upstream中设keepalive,在location中配http/1.1长连接三要素,并设置connect/read/send超时、缓冲区及被动健康检查。

Nginx 默认轮询(Round Robin)本身不控制连接数,它只按顺序分发新请求。真正影响“高性能连接数转发”的,是代理层的连接复用能力、缓冲机制和超时管理——不是轮询算法本身,而是围绕它的 upstream 和 location 配置细节。
启用 keepalive 连接池
轮询只是调度逻辑,若每次请求都新建 TCP 连接,后端压力会陡增。必须显式开启长连接复用:
- 在
upstream块中加keepalive 32;(推荐 16–64,视后端并发承受力调整) - 在
location中配齐三要素:proxy_http_version 1.1; proxy_set_header Connection ''; proxy_pass http://backend;
缺一不可。否则 Nginx 仍用 HTTP/1.0 短连接,
keepalive不生效。
合理设置连接与读写超时
避免慢后端拖垮整个 upstream:
-
proxy_connect_timeout 5s:建立连接上限,超过即换节点 -
proxy_read_timeout 30s:等待后端响应体的最长时间(流式接口可酌情延长) -
proxy_send_timeout 30s:向后端发送请求体的超时(大文件上传需调高)
超时过短易误判健康状态;过长则堆积空闲连接,耗尽 keepalive 槽位。
调优缓冲区减少小包拷贝
高频小响应(如 API JSON)易触发频繁 write syscall:
-
proxy_buffering on;(默认开启,勿关) -
proxy_buffers 8 64k;:分配 8 个 64KB 缓冲区 -
proxy_busy_buffers_size 128k;:忙时最多暂存 128KB 待发数据
这样能合并小响应,降低系统调用次数,提升吞吐。
配合被动健康检查防雪崩
轮询不会自动跳过宕机节点,必须靠失败熔断:
- 每个
server行后加max_fails=3 fail_timeout=30s -
location中启用重试:proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
单次失败立即转下一台,用户几乎无感。
不复杂但容易忽略











