load-balancer

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Load Balancer Configuration

负载均衡器配置

Quick Start

快速开始

Configure nginx to distribute traffic across multiple backend servers with health checks and automatic failover.
配置Nginx以在多台后端服务器间分发流量,并具备健康检查和自动故障转移功能。

Instructions

操作步骤

Step 1: Define upstream block

步骤1:定义上游服务器块

Create an upstream block with your backend servers:
nginx
upstream backend {
    # Load balancing method (optional, defaults to round-robin)
    least_conn;  # or ip_hash, or omit for round-robin
    
    # Backend servers
    server backend1.example.com:8080 weight=3;
    server backend2.example.com:8080 weight=2;
    server backend3.example.com:8080;
    
    # Backup server (used when all primary servers are down)
    server backup.example.com:8080 backup;
    
    # Health check parameters
    keepalive 32;
}
创建包含你的后端服务器的上游服务器块:
nginx
upstream backend {
    # Load balancing method (optional, defaults to round-robin)
    least_conn;  # or ip_hash, or omit for round-robin
    
    # Backend servers
    server backend1.example.com:8080 weight=3;
    server backend2.example.com:8080 weight=2;
    server backend3.example.com:8080;
    
    # Backup server (used when all primary servers are down)
    server backup.example.com:8080 backup;
    
    # Health check parameters
    keepalive 32;
}

Step 2: Configure proxy in server block

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

Add proxy configuration to route traffic to the upstream:
nginx
server {
    listen 80;
    server_name example.com;
    
    location / {
        proxy_pass http://backend;
        
        # Essential proxy headers
        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;
        
        # Timeouts
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
        
        # Buffering
        proxy_buffering on;
        proxy_buffer_size 4k;
        proxy_buffers 8 4k;
    }
}
添加代理配置以将流量路由到上游服务器:
nginx
server {
    listen 80;
    server_name example.com;
    
    location / {
        proxy_pass http://backend;
        
        # Essential proxy headers
        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;
        
        # Timeouts
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
        
        # Buffering
        proxy_buffering on;
        proxy_buffer_size 4k;
        proxy_buffers 8 4k;
    }
}

Step 3: Add health checks

步骤3:添加健康检查

Configure passive health checks (active checks require nginx Plus):
nginx
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;
}
Parameters:
  • max_fails
    : Number of failed attempts before marking server as unavailable
  • fail_timeout
    : Time to wait before retrying a failed server
配置被动健康检查(主动检查需要Nginx Plus):
nginx
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
    : 重试失败服务器前的等待时间

Step 4: Test and reload

步骤4:测试并重新加载配置

bash
undefined
bash
undefined

Test configuration

Test configuration

nginx -t
nginx -t

Reload nginx

Reload nginx

nginx -s reload
undefined
nginx -s reload
undefined

Load Balancing Methods

负载均衡算法

Round-robin (default): Distributes requests evenly across servers
nginx
upstream backend {
    server backend1.example.com:8080;
    server backend2.example.com:8080;
}
Least connections: Routes to server with fewest active connections
nginx
upstream backend {
    least_conn;
    server backend1.example.com:8080;
    server backend2.example.com:8080;
}
IP hash: Routes same client IP to same server (session persistence)
nginx
upstream backend {
    ip_hash;
    server backend1.example.com:8080;
    server backend2.example.com:8080;
}
Weighted: Distributes based on server capacity
nginx
upstream backend {
    server backend1.example.com:8080 weight=3;  # Gets 3x traffic
    server backend2.example.com:8080 weight=1;
}
轮询(默认):在服务器间均匀分发请求
nginx
upstream backend {
    server backend1.example.com:8080;
    server backend2.example.com:8080;
}
最少连接数:将请求路由到活跃连接数最少的服务器
nginx
upstream backend {
    least_conn;
    server backend1.example.com:8080;
    server backend2.example.com:8080;
}
IP哈希:将同一客户端IP的请求路由到同一服务器(会话持久化)
nginx
upstream backend {
    ip_hash;
    server backend1.example.com:8080;
    server backend2.example.com:8080;
}
加权轮询:根据服务器容量分发流量
nginx
upstream backend {
    server backend1.example.com:8080 weight=3;  # Gets 3x traffic
    server backend2.example.com:8080 weight=1;
}

Common Patterns

常见配置模式

WebSocket proxying

WebSocket代理

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

Sticky sessions with cookie

基于Cookie的粘性会话

nginx
upstream backend {
    server backend1.example.com:8080;
    server backend2.example.com:8080;
    
    # Requires nginx Plus or third-party module
    sticky cookie srv_id expires=1h domain=.example.com path=/;
}
nginx
upstream backend {
    server backend1.example.com:8080;
    server backend2.example.com:8080;
    
    # Requires nginx Plus or third-party module
    sticky cookie srv_id expires=1h domain=.example.com path=/;
}

Slow start (nginx Plus)

慢启动(Nginx Plus)

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

Advanced

高级配置

For detailed information, see:
  • Upstream Patterns - Advanced load balancing algorithms and patterns
  • Health Checks - Comprehensive health check configuration
  • Caching - Proxy caching strategies for load-balanced backends
如需详细信息,请参阅:
  • 上游服务器模式 - 高级负载均衡算法与模式
  • 健康检查 - 全面的健康检查配置
  • 缓存 - 负载均衡后端的代理缓存策略