Nginx集群中upstream流量调度本质是构建可控、可观察、带状态感知的分发层,需通过业务语义分组、匹配调度算法(如轮询/least_conn/weight)、location精准导流及健康检查、头透传、长连接复用等协同实现稳定可靠转发。
Nginx 集群中通过 upstream 进行流量调度,本质是构建一个可控、可观察、带状态感知的分发层,而不是简单地把请求“平均扔出去”。关键在于分组定义、策略匹配和连接控制三者协同。
每个微服务或功能模块应有独立的 upstream 块,放在 http{} 上下文中:
user_svc、order_api、file_upload
auth-service.default.svc.cluster.local)、Unix socket算法需匹配实际链路特征,不是越复杂越好:
weight=5,旧机器设 weight=1,但注意 least_conn 下 weight 仅影响初始建连阶段ip_hash:集群内调用方多为 Pod IP,易漂移,导致负载不均甚至单点过载分流逻辑由 location 规则驱动,必须与 upstream 分组一一对应:
^~ /api/user/ 前缀匹配,性能高且不易被正则覆盖proxy_pass http://user_svc/; 末尾斜杠决定是否截断路径 —— 推荐加斜杠,让后端收到干净路径map 指令解析 $http_x-env 或 $arg_v,再 proxy_pass http://$backend;
光转发不够,还要确保转发过程可靠、可查、可调:
max_fails=3 fail_timeout=30s,异常节点自动摘除proxy_set_header X-Real-IP $remote_addr;、X-Request-ID $request_id;
upstream 中加 keepalive 32;,location 中加 proxy_http_version 1.1; 和 proxy_set_header Connection '';
log_format 中包含 $upstream_addr 和 $upstream_response_time