-
默认轮询(Round Robin)
默认策略,请求按顺序依次分配给不同的服务器。
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
- 特点:请求均匀分配,适用于服务器性能相近的情况。
-
加权轮询(Weighted Round Robin)
给不同的服务器分配不同的权重,权重高的服务器接收更多请求。
http {
upstream backend {
server backend1.example.com weight=3; # 3/6 = 50% 的请求
server backend2.example.com weight=2; # 2/6 ≈ 33% 的请求
server backend3.example.com weight=1; # 1/6 ≈ 16% 的请求
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
- 特点:适用于服务器性能不均衡的情况(如 CPU、内存不同)。
-
IP 哈希(IP Hash)
同一个客户端的 IP 始终访问同一台服务器,适用于会话保持(Session Persistence)。
http {
upstream backend {
ip_hash; # 基于客户端 IP 计算哈希
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
-
特点:
- 解决 Session 共享问题(如登录状态)。
- 如果某台服务器宕机,该 IP 的请求会被重新哈希到其他服务器。
-
哈希(通用 Hash)
基于任意变量(如 $request_uri
、$args
)计算哈希,确保相同请求始终访问同一台服务器。
http {
upstream backend {
hash $request_uri consistent; # 基于请求 URI 哈希
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
-
特点:
- 适用于缓存优化(如相同的 URL 始终访问同一台服务器)。
consistent
参数可选,用于减少服务器增减时的哈希变化影响(一致性哈希)。
-
最少连接(Least Connections)
优先将请求分配给当前连接数最少的服务器。
http {
upstream backend {
least_conn; # 最少连接优先
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
- 特点:适用于请求处理时间差异较大的情况(如长连接、大文件下载)。
总结对比
策略 | 配置方式 | 适用场景 |
---|---|---|
轮询(Round Robin) | 默认 | 服务器性能相近,无状态服务 |
加权轮询(Weighted RR) | server ... weight=X | 服务器性能不均衡 |
IP 哈希(IP Hash) | ip_hash | 需要会话保持(Session) |
通用哈希(Hash) | hash $var | 基于 URL/参数固定访问某台服务器 |
最少连接(Least Conn) | least_conn | 服务器处理能力不同 |