插件窝 干货文章 Nginx如何实现轮询算法

Nginx如何实现轮询算法

server Nginx upstream 308    来源:    2025-04-22

Nginx 实现轮询算法(Round Robin)主要通过其内置的负载均衡模块 upstream 实现。轮询是 Nginx 默认的负载均衡策略,无需额外配置即可启用。以下是详细实现步骤和说明:


1. 基础轮询配置

nginx.confhttp 块中定义 upstream,并列出后端服务器:

http {
    upstream backend {
        # 默认就是轮询策略
        server 192.168.1.100:80;
        server 192.168.1.101:80;
        server 192.168.1.102:80;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}
  • 效果:请求会按顺序依次分发到 100101102 三台服务器,循环往复。

2. 加权轮询(Weighted Round Robin)

如果服务器性能不均,可通过 weight 分配权重:

upstream backend {
    server 192.168.1.100:80 weight=3;  # 3/5的请求
    server 192.168.1.101:80 weight=1;  # 1/5的请求
    server 192.168.1.102:80 weight=1;  # 1/5的请求
}
  • 效果:每 5 个请求中,100 服务器接收 3 个,101102 各接收 1 个。

3. 动态权重与健康检查

Nginx 会自动屏蔽故障节点,并支持动态调整:

upstream backend {
    server 192.168.1.100:80 max_fails=3 fail_timeout=30s;
    server 192.168.1.101:80 backup;  # 备用服务器
}
  • max_fails:允许失败的次数,超过后临时剔除。
  • backup:标记为备用服务器,仅当主服务器不可用时启用。

4. 其他相关参数

  • least_conn:非轮询,改用最小连接数策略。 nginx upstream backend { least_conn; server 192.168.1.100:80; server 192.168.1.101:80; }
  • ip_hash:基于客户端 IP 的固定分发(非轮询)。 nginx upstream backend { ip_hash; server 192.168.1.100:80; server 192.168.1.101:80; }

5. 验证配置

  1. 检查语法: bash nginx -t
  2. 重载配置: bash nginx -s reload

总结

  • 默认轮询:简单、公平,适合性能相近的服务器。
  • 加权轮询:适应性能差异,按权重分配流量。
  • 健康检查:自动处理故障节点,提高可用性。

通过调整 upstream 配置,可以灵活实现不同场景的负载均衡需求。