均衡算法也是多种多样,常见的两大类:即静态负载均衡法和动态负载均衡法。静态算法也是比较简单,主要有有一般轮询算法,基于比例的加权轮询算法,以及基于优先级的轮询算法。动态算法在较为复杂的网络环境中适应性更强,效果更好,主要有基于任务量最少连接优先级算法,基于性能的最快响应算法,预测算法及动态性能分配算法等
在以下实例片段中,backend服务器组中所有的优先级全部配置为默认的weight = 1,这样它们会按照一般轮询策略依次接收请求任务。该配置是一个最简单的实现Nginx服务器负载均衡的配置,所有访问www.myweb.name的请求都会在backend服务器组中实现负载均衡
upstream backend #配置后端服务器组
{
server 192.168.1.2:80;
server 192.168.1.3:80;
server 192.168.1.4:80; #默认weight = 1
}
server {
listen 80;
server_name www.myweb.name;
index index.html index.html
location / {
proxy_pass http://backend
proxy_set_header Host $host;
...
}
}
与实例一相比,在该实例片段中,backend服务器组中的服务器被赋予了不同的优先级别,weight变量的值就是轮询策略中的“权值”
upstream backend #配置后端服务器组
{
server 192.168.1.2:80 weight=5;
server 192.168.1.3:80 weight=3;
server 192.168.1.4:80; #默认weight = 1
}
server {
listen 80;
server_name www.myweb.name;
index index.html index.html
location / {
proxy_pass http://backend
proxy_set_header Host $host;
...
}
}
在该实例片段中,设置了两组被代理的服务器组,videobackend服务器组用于对请求video资源的客户端请求进行负载均衡,另外一组filebackend资源的客户端请求进行负载均衡,通过对location块url的不同配置
在location /file/中,我们将客户端真实的信息分别填充到了请求头中的Host、X-Real-IP 和 X-Forward-For头域,这样后端服务器组收到的请求就保留了客户端的真实信息而不是nginx服务器的信息
...
upstream videobackend #配置后端服务器组1
{
server 192.168.1.2:80 ;
server 192.168.1.3:80 ;
server 192.168.1.4:80 ;
}
upstream filebackend #配置后端服务器组2
{
server 192.168.1.5:80 ;
server 192.168.1.6:80 ;
server 192.168.1.7:80 ;
}
server {
listen 80;
server_name www.myweb.name;
index index.html index.html
location /video/ {
proxy_pass http://videobackend;
proxy_set_header Host $host;
...
}
location /file/ {
proxy_pass http://filebackend;
proxy_set_header Host $host;
# 保留客户端的真实信息
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...
}
}
客户端请求域名为home.myweb.name转发到homebackend服务器组 客户端请求域名为bbs.myweb.name转发到bbsbackend服务器组
...
upstream bbsbackend #配置后端服务器组1
{
server 192.168.1.2:80 ;
server 192.168.1.3:80 ;
server 192.168.1.4:80 ;
}
upstream homebackend #配置后端服务器组2
{
server 192.168.1.5:80 ;
server 192.168.1.6:80 ;
server 192.168.1.7:80 ;
}
server {
listen 80;
server_name www.home.myweb.name;
index index.html index.html
location /video/ {
proxy_pass http://homebackend;
proxy_set_header Host $host;
...
}
}
server {
listen 81;
server_name www.bbs.myweb.name;
index index.html index.html
location /{
proxy_pass http://bbsbackend;
proxy_set_header Host $host;
...
}
}
如客户端的请求为
http://www.myweb.name/file/download/media/1.mp3,该虚拟服务器首先使用location块将url重写为
http://www.myweb.name/file/download/mp3/1.mp3 ,然后新的url再由location块转发到后端backend服务器中实现负载均衡
...
upstream backend #配置后端服务器组
{
server 192.168.1.2:80;
server 192.168.1.3:80;
server 192.168.1.4:80; #默认weight = 1
}
server {
listen 80;
server_name www.myweb.name;
index index.html index.html
location / {
rewirte ^(/file/.*)/media/(.*).*$ $1/mp3/$2.mp3 last;
}
location / {
proxy_pass http://backend
proxy_set_header Host $host;
...
}
}