Nginx 中 upstream 必须定义在 http 块内,用于配置后端服务器组及负载均衡策略;支持轮询、加权轮询、ip_hash、least_conn 等策略,并通过 proxy_pass 引用。

在 Nginx 中配置 upstream 负载均衡块,核心是定义一组后端服务器,并指定分发策略。它必须写在 http 块内,不能放在 server 或 location 块里。
基础结构与位置要求
upstream 是一个命名的服务器组,名字可自定义(如 backend_servers),后续通过 proxy_pass http://backend_servers; 引用。基本格式如下:
- 必须位于
http { ... }大括号内部 - 每个
server行代表一个后端节点,支持 IP、域名、Unix socket 等地址形式 - 不加任何策略时,默认使用轮询(round-robin)
常用 server 参数说明
每个 server 后可附加参数,用于控制健康检查、权重、容灾等行为:
-
weight=数字:设置权重,默认为 1。例如
server 192.168.1.10:8080 weight=3; - max_fails=数字:连续失败多少次后标记该节点为不可用,默认 1 次
- fail_timeout=时间:标记为不可用后,隔多久重新尝试,默认 10 秒
- backup:仅当其他所有节点都不可用时才启用
- down:永久下线该节点,不参与调度(常用于维护)
- max_conns=数字:限制该节点最大并发连接数,防止单点过载
典型策略配置示例
根据业务需求选择对应策略,只需在 upstream 块开头添加指令即可:
-
轮询(默认):
upstream app { server 10.0.0.1:8080; server 10.0.0.2:8080; } -
加权轮询:
upstream app { server 10.0.0.1:8080 weight=2; server 10.0.0.2:8080 weight=1; } -
IP 哈希(会话保持):
upstream app { ip_hash; server 10.0.0.1:8080; server 10.0.0.2:8080; } -
最少连接:
upstream app { least_conn; server 10.0.0.1:8080; server 10.0.0.2:8080; }
配合 proxy_pass 使用
定义好 upstream 后,需在 server 的 location 中调用:
location / {
proxy_pass http://app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
注意:proxy_pass 后的 URL 必须与 upstream 名称完全一致,且末尾不加斜杠(除非你明确需要路径重写)。


















