乐闻世界logo
搜索文章和话题

Nginx 的负载均衡有哪些策略?如何配置?

2月21日 16:45

Nginx 的负载均衡有哪些策略?如何配置?

Nginx 提供了多种负载均衡策略,可以根据不同的业务需求选择合适的算法。负载均衡通过 upstream 模块实现,可以将请求分发到多个后端服务器。

主要负载均衡策略:

1. 轮询(Round Robin,默认)

按顺序依次将请求分配给每个服务器,适用于服务器性能相近的场景。

nginx
upstream backend { server 192.168.1.100:8080; server 192.168.1.101:8080; server 192.168.1.102:8080; }

2. 最少连接(Least Connections)

将请求分配给当前活动连接数最少的服务器,适用于请求处理时间差异较大的场景。

nginx
upstream backend { least_conn; server 192.168.1.100:8080; server 192.168.1.101:8080; server 192.168.1.102:8080; }

3. IP 哈希(IP Hash)

根据客户端 IP 地址进行哈希计算,确保同一 IP 的请求总是分配到同一台服务器,适用于需要会话保持的场景。

nginx
upstream backend { ip_hash; server 192.168.1.100:8080; server 192.168.1.101:8080; server 192.168.1.102:8080; }

4. 加权轮询(Weighted Round Robin)

为每台服务器设置权重,权重高的服务器接收更多请求,适用于服务器性能不均衡的场景。

nginx
upstream backend { server 192.168.1.100:8080 weight=3; server 192.168.1.101:8080 weight=2; server 192.168.1.102:8080 weight=1; }

5. 哈希(Hash)

根据指定的 key 进行哈希计算,可以是变量如 $request_uri、$cookie_name 等。

nginx
upstream backend { hash $request_uri consistent; server 192.168.1.100:8080; server 192.168.1.101:8080; }

服务器状态参数:

nginx
upstream backend { server 192.168.1.100:8080 weight=3 max_fails=3 fail_timeout=30s; server 192.168.1.101:8080 weight=2 max_fails=3 fail_timeout=30s; server 192.168.1.102:8080 down; server 192.168.1.103:8080 backup; }
  • weight:服务器权重,默认为 1
  • max_fails:允许的最大失败次数,超过则标记为不可用
  • fail_timeout:失败超时时间,在标记不可用后的等待时间
  • down:标记服务器为永久不可用
  • backup:标记为备用服务器,只在主服务器都不可用时使用
  • max_conns:限制最大并发连接数

完整配置示例:

nginx
http { upstream backend { least_conn; server 192.168.1.100:8080 weight=3 max_fails=3 fail_timeout=30s; server 192.168.1.101:8080 weight=2 max_fails=3 fail_timeout=30s; server 192.168.1.102:8080 weight=1 max_fails=3 fail_timeout=30s; server 192.168.1.103:8080 backup; keepalive 32; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }

健康检查:

Nginx 开源版本不提供主动健康检查,但可以通过被动健康检查(max_fails/fail_timeout)实现。商业版 Nginx Plus 提供主动健康检查功能。

选择策略建议:

  • 服务器性能相近:使用轮询
  • 请求处理时间差异大:使用最少连接
  • 需要会话保持:使用 IP 哈希
  • 服务器性能不均衡:使用加权轮询
  • 需要基于特定 key 分发:使用 hash
标签:Nginx