均衡算法也是多種多樣,常見的兩大類:即靜態(tài)負(fù)載均衡法和動(dòng)態(tài)負(fù)載均衡法。靜態(tài)算法也是比較簡(jiǎn)單,主要有有一般輪詢算法,基于比例的加權(quán)輪詢算法,以及基于優(yōu)先級(jí)的輪詢算法。動(dòng)態(tài)算法在較為復(fù)雜的網(wǎng)絡(luò)環(huán)境中適應(yīng)性更強(qiáng),效果更好,主要有基于任務(wù)量最少連接優(yōu)先級(jí)算法,基于性能的最快響應(yīng)算法,預(yù)測(cè)算法及動(dòng)態(tài)性能分配算法等
配置實(shí)例一:對(duì)所有請(qǐng)求實(shí)現(xiàn)一般輪詢規(guī)則的負(fù)載均衡
在以下實(shí)例片段中,backend服務(wù)器組中所有的優(yōu)先級(jí)全部配置為默認(rèn)的weight = 1,這樣它們會(huì)按照一般輪詢策略依次接收請(qǐng)求任務(wù)。該配置是一個(gè)最簡(jiǎn)單的實(shí)現(xiàn)Nginx服務(wù)器負(fù)載均衡的配置,所有訪問(wèn)www.myweb.name的請(qǐng)求都會(huì)在backend服務(wù)器組中實(shí)現(xiàn)負(fù)載均衡
upstream backend #配置后端服務(wù)器組
{
server 192.168.1.2:80;
server 192.168.1.3:80;
server 192.168.1.4:80; #默認(rèn)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;
...
}
}
配置實(shí)例二:對(duì)所有請(qǐng)求實(shí)現(xiàn)加權(quán)輪詢規(guī)則的負(fù)載均衡
與實(shí)例一相比,在該實(shí)例片段中,backend服務(wù)器組中的服務(wù)器被賦予了不同的優(yōu)先級(jí)別,weight變量的值就是輪詢策略中的“權(quán)值”
upstream backend #配置后端服務(wù)器組
{
server 192.168.1.2:80 weight=5;
server 192.168.1.3:80 weight=3;
server 192.168.1.4:80; #默認(rèn)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;
...
}
}
配置實(shí)例三:對(duì)特定資源實(shí)現(xiàn)負(fù)載均衡現(xiàn)負(fù)載均衡
在該實(shí)例片段中,設(shè)置了兩組被代理的服務(wù)器組,videobackend服務(wù)器組用于對(duì)請(qǐng)求video資源的客戶端請(qǐng)求進(jìn)行負(fù)載均衡,另外一組filebackend資源的客戶端請(qǐng)求進(jìn)行負(fù)載均衡,通過(guò)對(duì)location塊url的不同配置
在location /file/中,我們將客戶端真實(shí)的信息分別填充到了請(qǐng)求頭中的Host、X-Real-IP 和 X-Forward-For頭域,這樣后端服務(wù)器組收到的請(qǐng)求就保留了客戶端的真實(shí)信息而不是nginx服務(wù)器的信息
...
upstream videobackend #配置后端服務(wù)器組1
{
server 192.168.1.2:80 ;
server 192.168.1.3:80 ;
server 192.168.1.4:80 ;
}
upstream filebackend #配置后端服務(wù)器組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;
# 保留客戶端的真實(shí)信息
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...
}
}
配置實(shí)例四:對(duì)不同域名實(shí)現(xiàn)負(fù)載均衡
客戶端請(qǐng)求域名為home.myweb.name轉(zhuǎn)發(fā)到homebackend服務(wù)器組 客戶端請(qǐng)求域名為bbs.myweb.name轉(zhuǎn)發(fā)到bbsbackend服務(wù)器組
...
upstream bbsbackend #配置后端服務(wù)器組1
{
server 192.168.1.2:80 ;
server 192.168.1.3:80 ;
server 192.168.1.4:80 ;
}
upstream homebackend #配置后端服務(wù)器組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;
...
}
}
配置實(shí)例五:實(shí)現(xiàn)帶有url重寫的負(fù)載均衡
如客戶端的請(qǐng)求為
http://www.myweb.name/file/download/media/1.mp3,該虛擬服務(wù)器首先使用location塊將url重寫為
http://www.myweb.name/file/download/mp3/1.mp3 ,然后新的url再由location塊轉(zhuǎn)發(fā)到后端backend服務(wù)器中實(shí)現(xiàn)負(fù)載均衡
...
upstream backend #配置后端服務(wù)器組
{
server 192.168.1.2:80;
server 192.168.1.3:80;
server 192.168.1.4:80; #默認(rèn)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;
...
}
}