Nginx 是一款流行的高性能 Web 服务器,它也可以作为负载均衡器使用。Nginx 提供了多种负载均衡策略,可以根据实际需求进行选择。
Nginx 负载均衡策略
Nginx 支持以下负载均衡策略:
轮询(Round Robin)
轮询是最常见的负载均衡策略。当有多个后端服务器时,Nginx 会依次将请求发送到每个服务器,以确保每个服务器都能得到处理。这种负载均衡策略比较简单,适用于多台服务器性能相近的场景。
使用轮询策略的配置示例:
代码语言:javascript复制http {
upstream myapp {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp;
}
}
}
在上面的配置中,Nginx 会将请求依次发送到 backend1.example.com、backend2.example.com 和 backend3.example.com。
加权轮询(Weighted Round Robin)
加权轮询是一种基于轮询策略的变体,它给不同的服务器分配了不同的权重。这种负载均衡策略适用于多台服务器性能差异较大的场景。
使用加权轮询策略的配置示例:
代码语言:javascript复制http {
upstream myapp {
server backend1.example.com weight=3;
server backend2.example.com weight=2;
server backend3.example.com weight=1;
}
server {
listen 80;
location / {
proxy_pass http://myapp;
}
}
}
在上面的配置中,Nginx 会按照权重比例将请求发送到 backend1.example.com、backend2.example.com 和 backend3.example.com。
IP Hash
IP Hash 策略是一种基于客户端 IP 地址的负载均衡策略。当一个客户端第一次请求时,Nginx 会计算客户端 IP 地址的哈希值,并将请求发送到对应的服务器上。这种负载均衡策略适用于需要客户端始终访问同一台服务器的场景。
使用 IP Hash 策略的配置示例:
代码语言:javascript复制http {
upstream myapp {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp;
}
}
}
在上面的配置中,Nginx 会根据客户端 IP 地址的哈希值将请求发送到对应的服务器上。
最小连接数(Least Connections)
最小连接数策略会将请求发送到当前连接数最少的服务器上。这种负载均衡策略适用于后端服务器性能差异较大,连接数分布不均的场景。
使用最小连接数策略的配置示例:
代码语言:javascript复制http {
upstream myapp {
least_conn;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp;
}
}
}
在上面的配置中,Nginx 会将请求发送到当前连接数最少的服务器上。
随机(Random)
随机策略会将请求随机发送到一个后端服务器上。这种负载均衡策略适用于多台服务器性能相近,没有特别要求的场景。
使用随机策略的配置示例:
代码语言:javascript复制http {
upstream myapp {
random;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp;
}
}
}
在上面的配置中,Nginx 会随机将请求发送到一个后端服务器上。