nginx 负载均衡
使用 upstream 模块将流量分发到多个后端服务器
语法
upstream name { server addr; } → proxy_pass http://name;参数
| 参数 | 说明 | 示例 | 级别 |
|---|---|---|---|
server |
后端服务器地址 | server 127.0.0.1:3001; |
常用 |
weight |
权重(默认 1) | server 127.0.0.1:3001 weight=3; |
常用 |
max_fails |
最大失败次数 | server 127.0.0.1:3001 max_fails=3; |
常用 |
backup |
备用服务器 | server 127.0.0.1:3003 backup; |
进阶 |
ip_hash |
按 IP 哈希(会话保持) | ip_hash; |
进阶 |
least_conn |
最少连接数策略 | least_conn; |
进阶 |
示例
轮询负载均衡
upstream app {
server 127.0.0.1:3001;
server 127.0.0.1:3002;
server 127.0.0.1:3003;
}
server {
location / {
proxy_pass http://app;
}
}默认轮询,请求均匀分配
加权负载均衡
upstream app {
server 192.168.1.10:8080 weight=5;
server 192.168.1.11:8080 weight=3;
server 192.168.1.12:8080 weight=2;
}性能好的服务器分配更多请求
健康检查 + 备用
upstream app {
server 127.0.0.1:3001 max_fails=3 fail_timeout=30s;
server 127.0.0.1:3002 max_fails=3 fail_timeout=30s;
server 127.0.0.1:3003 backup;
}主服务器都挂了才用 backup
常见错误
upstream 中所有服务器都不可用
检查后端服务是否运行,确认端口和地址正确
技巧
- ip_hash 适合有状态的应用(session)
- least_conn 适合请求处理时间差异大的场景
- 配合健康检查避免请求发到挂掉的服务器