插件窝 干货文章 nginx怎么实现的负载均衡

nginx怎么实现的负载均衡

server upstream Nginx 204    来源:    2025-04-07

Nginx 主要通过 upstream 模块 实现负载均衡,将客户端请求分发到多个后端服务器(如 Web 服务器、应用服务器等)。以下是核心实现方式和配置详解:


1. 基础负载均衡配置

nginx.conf 中通过 upstream 块定义后端服务器组,再通过 proxy_pass 转发请求。

http {
    upstream backend_servers {
        server 192.168.1.101:80;  # 后端服务器1
        server 192.168.1.102:80;  # 后端服务器2
        server 192.168.1.103:80;  # 后端服务器3
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend_servers;  # 请求转发到upstream组
        }
    }
}

2. 负载均衡策略

Nginx 支持多种负载均衡算法:

① 轮询(Round Robin)

  • 默认策略,按顺序逐一分发请求。
  • 示例: nginx upstream backend { server 192.168.1.101; server 192.168.1.102; }

② 加权轮询(Weighted Round Robin)

  • 根据服务器性能分配权重,权重越高被分配更多请求。
  • 示例: nginx upstream backend { server 192.168.1.101 weight=3; # 3/5的请求 server 192.168.1.102 weight=2; # 2/5的请求 }

③ IP哈希(IP Hash)

  • 根据客户端IP的哈希值固定分配到同一台服务器,适合会话保持(Session Persistence)。
  • 示例: nginx upstream backend { ip_hash; server 192.168.1.101; server 192.168.1.102; }

④ 最少连接(Least Connections)

  • 将请求分发给当前连接数最少的服务器。
  • 示例: nginx upstream backend { least_conn; server 192.168.1.101; server 192.168.1.102; }

⑤ 响应时间优先(Fair,需第三方模块)

  • 根据后端服务器的响应时间动态分配请求(需安装 nginx-upstream-fair 模块)。

3. 健康检查

Nginx 默认通过被动健康检查(失败后标记服务器为不可用),也可通过第三方模块(如 nginx_upstream_check_module)实现主动检查。

upstream backend {
    server 192.168.1.101 max_fails=3 fail_timeout=30s;  # 3次失败后暂停30秒
    server 192.168.1.102;
}

4. 高级配置选项

  • 备份服务器:标记为 backup,仅在主服务器不可用时启用。 nginx server 192.168.1.103 backup;
  • 长连接优化:复用连接提升性能。 nginx upstream backend { keepalive 32; # 保持的连接数 }

5. 完整示例

http {
    upstream backend {
        least_conn;
        server 192.168.1.101 weight=2;
        server 192.168.1.102;
        server 192.168.1.103 backup;
        keepalive 32;
    }

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

6. 关键注意事项

  1. 会话保持:默认无状态,若需会话保持,使用 ip_hash 或应用层方案(如Redis共享Session)。
  2. 动态扩展:修改 upstream 配置后需重载Nginx(nginx -s reload)。
  3. 性能监控:结合日志或工具(如Prometheus)监控后端服务器负载。

通过以上配置,Nginx 可以高效实现高可用、高性能的负载均衡。