插件窝 干货文章 Nginx怎样实现负载均衡

Nginx怎样实现负载均衡

server Nginx upstream 875    来源:    2025-04-27

Nginx 作为高性能的反向代理服务器,可以通过多种算法实现负载均衡,将客户端请求分发到多个后端服务器上。以下是详细的实现方法和配置示例:


一、核心负载均衡配置

nginx.confhttp 块中定义 upstream 模块,然后在 server 块中通过 proxy_pass 引用。

http {
    upstream backend {
        # 定义后端服务器列表(支持IP、域名、端口)
        server 192.168.1.100:80;
        server 192.168.1.101:80;
        server backend.example.com:8080;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;  # 指向upstream名称
            proxy_set_header Host $host;
        }
    }
}

二、负载均衡算法

Nginx 支持多种负载均衡策略:

  1. 轮询(Round Robin)
    默认算法,按顺序分配请求。

    upstream backend {
       server 192.168.1.100;
       server 192.168.1.101;
    }
    
  2. 加权轮询(Weighted Round Robin)
    通过 weight 分配权重,权重越高分配的请求越多。

    upstream backend {
       server 192.168.1.100 weight=3;  # 3/5的请求
       server 192.168.1.101 weight=2;  # 2/5的请求
    }
    
  3. IP哈希(IP Hash)
    根据客户端IP固定分配到同一后端,适合会话保持。

    upstream backend {
       ip_hash;
       server 192.168.1.100;
       server 192.168.1.101;
    }
    
  4. 最少连接(Least Connections)
    优先分配给当前连接数最少的后端。

    upstream backend {
       least_conn;
       server 192.168.1.100;
       server 192.168.1.101;
    }
    
  5. 基于响应时间(Fair,需第三方模块)
    按后端服务器的响应时间分配请求(需安装 nginx-upstream-fair 模块)。


三、高级配置参数

  1. 健康检查
    Nginx 被动检查(默认):

    upstream backend {
       server 192.168.1.100 max_fails=3 fail_timeout=30s;  # 30秒内失败3次标记为不可用
       server 192.168.1.101 backup;  # 备用服务器(其他服务器不可用时启用)
    }
    

    主动检查需通过 nginx_upstream_check_module 或集成 Nginx Plus。

  2. 长连接优化
    复用与后端的连接,减少开销:

    upstream backend {
       server 192.168.1.100;
       keepalive 32;  # 保持的连接数
    }
    
  3. 会话保持(Sticky Session)
    使用 sticky 模块(需安装 nginx-sticky-module):

    upstream backend {
       sticky;
       server 192.168.1.100;
       server 192.168.1.101;
    }
    

四、完整配置示例

http {
    upstream backend {
        least_conn;
        server 192.168.1.100:80 weight=2;
        server 192.168.1.101:80 max_fails=3 fail_timeout=30s;
        server 192.168.1.102:80 backup;
        keepalive 16;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
        }
    }
}

五、验证与调试

  1. 检查配置语法bash nginx -t
  2. 重新加载配置bash nginx -s reload
  3. 监控后端状态
    通过 access_logerror_log 或工具如 ngxtop 观察请求分发情况。

六、注意事项

  • 如果后端服务器使用 HTTPS,需将 proxy_pass 改为 https://backend
  • 对于 WebSocket 负载均衡,需添加以下头: nginx proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";
  • 生产环境建议结合 Keepalived 或 DNS 轮询实现 Nginx 自身的高可用。

通过以上配置,Nginx 可以高效地分散流量到多个后端服务器,提升系统的可用性和性能。