轮询算法
轮询算法是 Nginx 中默认的负载均衡算法。在配置文件中,只需要设置 upstream 段落中的 server 指令,并指定后端服务器的 IP 地址和端口号即可。例如:
代码语言:javascript复制http {
upstream backend {
server 192.168.1.100:8080;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
在这个例子中,Nginx 会将请求轮流分配到三台后端服务器上。
IP Hash 算法
IP Hash 算法会根据客户端的 IP 地址来计算一个 hash 值,然后将请求分配到具有相应 hash 值的后端服务器上。在配置文件中,只需要在 upstream 段落中添加 ip_hash 指令即可。例如:
代码语言:javascript复制http {
upstream backend {
ip_hash;
server 192.168.1.100:8080;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
在这个例子中,Nginx 会根据客户端的 IP 地址将请求分配到三台后端服务器上,保证相同 IP 地址的请求总是被分配到同一个后端服务器上。
Least Connections 算法
Least Connections 算法会将请求分配到当前连接数最少的后端服务器上。在配置文件中,只需要在 upstream 段落中添加 least_conn 指令即可。例如:
代码语言:javascript复制http {
upstream backend {
least_conn;
server 192.168.1.100:8080;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
在这个例子中,Nginx 会将请求分配到当前连接数最少的后端服务器上,保证负载均衡。
Weighted Round Robin 算法
Weighted Round Robin 算法会将请求依次分配到每个后端服务器上,但是每个服务器被分配的次数不同。在配置文件中,只需要在 upstream 段落中设置每个服务器的权重即可。例如:
代码语言:javascript复制http {
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;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
在这个例子中,Nginx 会将请求依次分配到每个后端服务器上,但是第一个服务器会被分配三次,第二个服务器会被分配两次,第三个服务器会被分配一次。这样可以根据服务器的性能配置不同的权重,实现更精细的负载均衡。
Random 算法
Random 算法会随机将请求分配到任意一台后端服务器上。在配置文件中,只需要在 upstream 段落中添加 random 指令即可。例如:
代码语言:javascript复制http {
upstream backend {
random;
server 192.168.1.100:8080;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
在这个例子中,Nginx 会随机将请求分配到任意一台后端服务器上,实现随机负载均衡。
除了上述五种负载均衡算法,Nginx 还提供了更多的算法,例如 IP Hash 和 Least Connections 结合的算法,可以在不同的场景下选择适合的算法。配置 Nginx 的负载均衡算法非常简单,只需要在 upstream 段落中设置相应的指令即可。