来源:马哥Linux运维 | 发布日期:2025-08-18
Nginx 负载均衡策略选择实战指南
生产环境中因负载均衡策略选择不当导致的故障屡见不鲜——购物车数据丢失、登录状态不稳、负载分布不均。本文对比两种核心策略并提供最佳实践。
两大主流策略
加权轮询(Weighted Round-Robin)
根据服务器权重按比例分发请求,适合服务器性能差异明显的场景。
upstream backend {
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080 weight=2;
server 192.168.1.12:8080 weight=1;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
适用场景:
- 服务器性能差异明显
- 无状态应用(如 API 服务)
- 需要灵活控制流量分配
IP 哈希(IP Hash)
根据客户端 IP 哈希值将请求固定分发到特定服务器,实现会话保持。
upstream backend {
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
适用场景:
- 有状态应用(如 Session 粘性)
- 需要会话保持的系统
- 本地缓存依赖性强的应用
实战对比测试
| 指标 | 加权轮询 | IP 哈希 |
|---|---|---|
| 平均响应时间 | 156ms | 189ms |
| 吞吐量 (RPS) | 8,432 | 7,156 |
| 99% 延迟 | 445ms | 567ms |
| 服务器负载均衡度 | ⭐⭐⭐⭐ | ⭐⭐ |
| Session 一致性 | ❌ | ✅ |
生产最佳实践:混合策略
推荐将路由按资源类型隔离:静态资源用加权轮询,用户接口用 IP 哈希。
# 静态资源 — 加权轮询
upstream static_backend {
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080 weight=2;
}
# 用户接口 — IP 哈希(保持会话)
upstream user_backend {
ip_hash;
server 192.168.1.20:8080;
server 192.168.1.21:8080;
}
server {
listen 80;
server_name example.com;
location ~* \.(css|js|png|jpg|jpeg|gif|ico)$ {
proxy_pass http://static_backend;
expires 1y;
add_header Cache-Control "public, immutable";
}
location /api/user/ {
proxy_pass http://user_backend;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
其他关键策略
- least_conn:转发给当前活跃连接数最少的服务器,适合长连接场景
- sticky 会话(第三方模块):基于 Cookie 实现更细粒度的会话保持
- 主动健康检查:配合
max_fails+fail_timeout自动摘除故障节点
选择决策要点
- 有状态 vs 无状态 → 有状态选 IP Hash / sticky,无状态选轮询
- 服务器异构程度 → 性能差异大时用加权轮询精细控制
- 缓存亲和性 → 本地缓存依赖强的应用优先 IP Hash
- 流量突发应对 → least_conn 在流量波动大时更均衡
- 故障容错 → 始终配合健康检查和故障摘除机制
关联页面
| 页面 | 关联点 |
|---|---|
| nginx-config-pitfalls | Nginx 配置排坑 |
| nginx-realtime-push-guide | Nginx 实时推送与长连接配置 |
| nginx-security-config-guide | Nginx 安全配置 |
| nginx-pre-launch-checklist | Nginx 上线前检查清单 |
| nginx-production-performance-optimization | 生产级 Nginx 性能优化 — OS 内核/Worker 进程/HTTP I/O/Upstream |
| fullstack-performance-troubleshooting | 全栈性能排障 |