全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-20 7 分钟 ✍️ juanwangdev

负载均衡算法与配置

NGINX 作为负载均衡器将流量分发到多个后端服务器。正确配置可提升可用性、响应速度和资源利用率。

upstream 定义

基本配置

nginx
http {
    upstream backend_pool {
        server 10.0.0.1:8080;
        server 10.0.0.2:8080;
        server 10.0.0.3:8080;
    }
    
    server {
        listen 80;
        
        location / {
            proxy_pass http://backend_pool;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

upstream 块必须在 http 块内定义。proxy_pass 引用 upstream 名称即可使用。

调度算法

五种内置算法

nginx
# 1. round-robin(默认)
upstream backend {
    server 10.0.0.1:8080;
    server 10.0.0.2:8080;
}

# 2. weighted - 加权轮询
upstream backend {
    server 10.0.0.1:8080 weight=3;
    server 10.0.0.2:8080 weight=1;
}

# 3. least_conn - 最少连接
upstream backend {
    least_conn;
    server 10.0.0.1:8080;
    server 10.0.0.2:8080;
}

# 4. ip_hash - IP 哈希
upstream backend {
    ip_hash;
    server 10.0.0.1:8080;
    server 10.0.0.2:8080;
}

# 5. hash - 自定义哈希
upstream backend {
    hash $cookie_session_id consistent;
    server 10.0.0.1:8080;
    server 10.0.0.2:8080;
}

服务器参数

完整参数说明

nginx
upstream backend {
    # 正常服务器
    server 10.0.0.1:8080 weight=5 max_fails=3 fail_timeout=30s;
    
    # 备份服务器
    server 10.0.0.2:8080 backup;
    
    # 维护中的服务器
    server 10.0.0.3:8080 down;
    
    # IPv6 地址
    server [2001:db8::1]:8080;
    
    # Unix socket
    server unix:/tmp/backend.sock;
}
  • weight — 权重,值越高分配越多
  • max_fails — 连续失败上限,达到后标记不可用
  • fail_timeout — 失败后隔离时间,也是重试检查周期
  • backup — 备份服务器,仅在正常服务器不可用时使用
  • down — 标记为永久不可用(配合 ip_hash 使用)

负载均衡配置示例

典型生产环境

nginx
upstream api_backend {
    least_conn;
    
    server 10.0.0.1:8080 weight=5 max_fails=2 fail_timeout=15s;
    server 10.0.0.2:8080 weight=3 max_fails=2 fail_timeout=15s;
    server 10.0.0.3:8080 backup;
}

server {
    listen 80;
    
    location /api/ {
        proxy_pass http://api_backend;
        proxy_next_upstream error timeout http_500 http_502;
        proxy_next_upstream_tries 2;
    }
}

proxy_next_upstream 定义哪些情况下尝试下一台服务器。http_500 等可配置,避免将错误返回给客户端。

要点总结

  • upstream 块在 http 层定义,通过 proxy_pass 引用
  • 5 种内置算法:round-robin、weighted、least_conn、ip_hash、hash
  • weight 按服务器性能比例分配流量
  • max_fails + fail_timeout 实现自动故障摘除
  • backup 标记备份服务器
  • proxy_next_upstream 配置故障转移条件

📝 发现内容有误?点击此处直接编辑

← 上一篇 性能调优与监控
下一篇 → 高可用性(Keepalived+VRRP)
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库