Nginx 负载均衡调度算法

Nginx 支持的四种负载均衡算法及其应用场景

问题

Nginx 支持哪些负载均衡调度算法?

解答

1. weight 轮询(默认)

按照权重将请求分配到不同的后端服务器。当某台服务器宕机时,Nginx 会自动剔除该服务器,不影响请求处理。

upstream backend {
    server 192.168.1.10 weight=3;
    server 192.168.1.11 weight=1;
    server 192.168.1.12 weight=2;
}

权重值越大,分配到的请求越多。适合后端服务器硬件配置不同的场景。

2. ip_hash

根据客户端 IP 的 hash 值分配请求,同一 IP 的请求会固定分配到同一台服务器,解决 session 共享问题。

upstream backend {
    ip_hash;
    server 192.168.1.10;
    server 192.168.1.11;
    server 192.168.1.12;
}

3. fair

根据后端服务器的响应时间动态分配请求,响应快的服务器分配更多请求。需要安装 upstream_fair 模块。

upstream backend {
    fair;
    server 192.168.1.10;
    server 192.168.1.11;
    server 192.168.1.12;
}

4. url_hash

根据请求 URL 的 hash 值分配,相同 URL 固定访问同一台服务器,提高缓存命中率。需要安装 hash 模块。

upstream backend {
    hash $request_uri;
    server 192.168.1.10;
    server 192.168.1.11;
    server 192.168.1.12;
}

关键点

  • weight 轮询是默认算法,支持自动故障转移
  • ip_hash 适合需要保持会话的场景
  • fair 和 url_hash 需要额外安装模块
  • 根据实际需求选择算法:会话保持用 ip_hash,静态资源缓存用 url_hash,性能优化用 fair