Nginx通过upstream模块实现负载均衡,需配置upstream、server和proxy_pass三部分;支持轮询、加权轮询、ip_hash、least_conn等算法及max_fails、backup等稳定性参数。

Nginx 实现请求平衡调度,核心是通过 upstream 模块定义后端服务器组,并配合 proxy_pass 将请求转发过去。调度行为由 upstream 块内的算法和参数控制,无需额外插件,开箱即用。
配置基础结构必须包含三部分
-
upstream块:声明服务器池及调度规则 -
server块:监听端口、接收客户端请求 -
location内proxy_pass:指向 upstream 名称,触发调度
例如:
http {
upstream myapp {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
server {
listen 80;
location / {
proxy_pass http://myapp;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}常用调度算法及适用场景
轮询(默认)
请求按顺序逐一分配,适合后端服务器性能相近、无状态服务。
不需额外指令,只要列出server行即可生效。加权轮询
用weight=参数指定每台服务器承担流量的比例。
例如:server 192.168.1.10:8080 weight=3;和server 192.168.1.11:8080 weight=1;表示前者处理约 75% 的请求。
适合新旧服务器混用、CPU/内存配置不均的情况。IP 哈希(会话保持)
加ip_hash;指令,确保同一客户端 IP 始终打到同一台后端。
适用于未做 Session 共享的传统 Web 应用(如购物车、登录态)。
注意:增减后端节点会导致哈希重分布,部分用户会话中断。最少连接
加least_conn;指令,Nginx 选择当前活跃连接数最少的服务器。
对长连接(WebSocket)、响应时间差异大的 API 更友好,比轮询更均衡。
增强稳定性的关键参数
-
max_fails=3 fail_timeout=30s:连续失败 3 次后,30 秒内不再发请求给该节点 -
backup:标记为备用服务器,仅当其他节点全不可用时启用 -
down:手动下线某节点,不参与调度(常用于维护) -
max_conns=100:限制单台服务器最大并发连接数,防过载
例如:
upstream myapp {
server 192.168.1.10:8080 weight=2 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 backup;
server 192.168.1.12:8080 down;
}不复杂但容易忽略


















