upstream块用于定义后端服务器组,必须置于http块内;支持轮询、加权轮询、ip_hash、least_conn等算法,并可通过max_fails、backup等参数实现健康检查与容错。

在 Nginx 中,upstream 块用于定义一组后端服务器,是实现反向代理和负载均衡的核心配置。它必须放在 http 块内,不能写在 server 或 location 中。
upstream 基本语法与定义方式
upstream 后跟一个自定义名称(如 backend_servers),接着用大括号包裹一组 server 指令,每个 server 表示一个后端节点:
upstream backend_servers {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
该名称后续可在 proxy_pass 中引用,例如:proxy_pass http://backend_servers;
支持的负载均衡算法及配置参数
Nginx 默认使用轮询(round-robin),也可显式指定或切换为其他策略:
- 轮询(默认):不加参数即启用,请求依次分发到各服务器
-
加权轮询(weight):给不同服务器分配权重,如
server 192.168.1.10:8080 weight=3;,数值越大承担请求越多 -
IP哈希(ip_hash):确保同一客户端 IP 总被转发到同一后端,适合需会话保持的场景;注意:启用后不能直接配
weight - 最少连接(least_conn):优先将新请求发给当前活跃连接数最少的服务器
后端健康状态控制与容错配置
通过附加参数可提升集群稳定性:
-
max_fails 和 fail_timeout:定义失败重试机制,例如
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;表示 30 秒内失败 3 次,则标记该节点不可用 30 秒 - backup:标记为备用服务器,仅当其他节点全部不可用时才启用
- down:手动标记该节点永久下线(常用于维护)
- resolve(需配合 resolver 使用):支持基于 DNS 的动态服务发现,适用于容器或云环境
结合 proxy_pass 实现完整反向代理
定义好 upstream 后,需在 location 中调用:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
注意:proxy_pass 后的 URL 必须与 upstream 名称完全一致(前面加 http://),且结尾不带斜杠(除非后端路径有特殊要求)

















