nginx负载均衡核心是http块中用upstream定义服务器组,server块内用proxy_pass引用;支持轮询、加权轮询(weight)、ip_hash、least_conn等策略,并可通过max_fails和fail_timeout实现健康检查。

在 nginx.conf 中配置负载均衡,核心是使用 upstream 模块定义后端服务器组,并在 server 块中通过 proxy_pass 引用它。整个过程不需重启 nginx(重载即可),配置清晰且可扩展。
基础结构:upstream + server + proxy_pass
这是最简可行的配置骨架:
- 在
http块内定义upstream,指定一组后端地址 - 在
server块中监听端口(如 80),用location /匹配请求 - 把请求通过
proxy_pass http://your_upstream_name;转发出去
示例:
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;
}
}
}
选择合适的负载均衡算法
在 upstream 块中添加指令,就能切换分发逻辑:
- 轮询(默认):不加任何指令,按顺序轮流分发
-
加权轮询:给 server 加
weight=数值,比如server 192.168.1.10:8080 weight=3;表示承担约 3/5 的流量 -
IP 哈希:加
ip_hash;,确保同一 IP 始终打到同一台后端,适合无共享 session 的场景 -
最少连接:加
least_conn;,新请求优先交给当前活跃连接数最少的机器,对长连接(如 WebSocket)更友好
加入健康检查与容错能力
仅靠默认配置无法自动剔除故障节点。需显式设置检测参数:
-
max_fails=3:连续失败 3 次即标记为不可用 -
fail_timeout=30s:30 秒内不向该节点转发请求,超时后自动重试 - 可配合
backup标记备用服务器,仅当其他全宕时启用
示例:
upstream myapp {
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.12:8080 backup;
}
四层 TCP/UDP 负载均衡(非 HTTP 场景)
若需代理 MySQL、Redis 或游戏服务等非 HTTP 流量,需启用 stream 模块(nginx ≥ 1.9.0):
- 配置写在
stream { ... }块中,不能放在http内 - 同样支持
upstream、least_conn、hash $remote_addr等 - 注意:stream 不处理 HTTP 头,也不支持
proxy_set_header
示例(MySQL):
stream {
upstream mysql_cluster {
server 192.168.1.20:3306 max_fails=3 fail_timeout=30s;
server 192.168.1.21:3306 max_fails=3 fail_timeout=30s;
}
server {
listen 3306;
proxy_pass mysql_cluster;
}
}











