Nginx负载均衡配置Skill load-balancer

此技能用于配置nginx负载均衡,包括设置上游服务器、实施健康检查和故障转移策略,以优化服务器资源利用和确保高可用性。关键词:nginx, 负载均衡, 健康检查, 故障转移, 服务器管理, 流量分发, 高可用, DevOps。

DevOps 0 次安装 0 次浏览 更新于 3/9/2026

name: 负载均衡器 description: 配置nginx负载均衡,包括上游服务器、健康检查和故障转移策略。用于设置负载均衡、在多个服务器上分发流量或配置上游后端。

负载均衡器配置

快速开始

配置nginx以在多个后端服务器上分发流量,包括健康检查和自动故障转移。

说明

步骤 1: 定义上游块

使用后端服务器创建上游块:

upstream backend {
    # 负载均衡方法(可选,默认为轮询)
    least_conn;  # 或 ip_hash,或省略以使用轮询
    
    # 后端服务器
    server backend1.example.com:8080 weight=3;
    server backend2.example.com:8080 weight=2;
    server backend3.example.com:8080;
    
    # 备份服务器(当所有主服务器都宕机时使用)
    server backup.example.com:8080 backup;
    
    # 健康检查参数
    keepalive 32;
}

步骤 2: 在服务器块中配置代理

添加代理配置以将流量路由到上游:

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;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # 超时设置
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
        
        # 缓冲设置
        proxy_buffering on;
        proxy_buffer_size 4k;
        proxy_buffers 8 4k;
    }
}

步骤 3: 添加健康检查

配置被动健康检查(主动检查需要nginx Plus):

upstream backend {
    server backend1.example.com:8080 max_fails=3 fail_timeout=30s;
    server backend2.example.com:8080 max_fails=3 fail_timeout=30s;
    server backend3.example.com:8080 max_fails=3 fail_timeout=30s;
}

参数:

  • max_fails: 在标记服务器为不可用之前的失败尝试次数
  • fail_timeout: 重试失败服务器前的等待时间

步骤 4: 测试和重新加载

# 测试配置
nginx -t

# 重新加载nginx
nginx -s reload

负载均衡方法

轮询(默认): 在服务器之间均匀分发请求

upstream backend {
    server backend1.example.com:8080;
    server backend2.example.com:8080;
}

最少连接: 路由到活跃连接最少的服务器

upstream backend {
    least_conn;
    server backend1.example.com:8080;
    server backend2.example.com:8080;
}

IP哈希: 将相同客户端IP路由到相同服务器(会话持久性)

upstream backend {
    ip_hash;
    server backend1.example.com:8080;
    server backend2.example.com:8080;
}

加权: 基于服务器容量分发

upstream backend {
    server backend1.example.com:8080 weight=3;  # 获得3倍流量
    server backend2.example.com:8080 weight=1;
}

常见模式

WebSocket代理

location /ws {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

使用Cookie的粘性会话

upstream backend {
    server backend1.example.com:8080;
    server backend2.example.com:8080;
    
    # 需要nginx Plus或第三方模块
    sticky cookie srv_id expires=1h domain=.example.com path=/;
}

慢启动(nginx Plus)

upstream backend {
    server backend1.example.com:8080 slow_start=30s;
    server backend2.example.com:8080 slow_start=30s;
}

高级

有关详细信息,请参阅: