溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何在Nginx中配置負(fù)載均衡

發(fā)布時(shí)間:2021-01-29 14:39:05 來(lái)源:億速云 閱讀:174 作者:Leah 欄目:開發(fā)技術(shù)

如何在Nginx中配置負(fù)載均衡?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

什么是負(fù)載均衡

負(fù)載均衡主要通過(guò)專門的硬件設(shè)備或者通過(guò)軟件算法實(shí)現(xiàn)。通過(guò)硬件設(shè)備實(shí)現(xiàn)的負(fù)載均衡效果好、效率高、性能穩(wěn)定,但是成本比較高。通過(guò)軟件實(shí)現(xiàn)的負(fù)載均衡主要依賴于均衡算法的選擇和程序的健壯性。均衡算法也是多種多樣的,常見的有兩大類:即靜態(tài)負(fù)載均衡算法和動(dòng)態(tài)負(fù)載均衡算法。靜態(tài)算法實(shí)現(xiàn)比較簡(jiǎn)單,在一般網(wǎng)絡(luò)環(huán)境下也能達(dá)到比較好的效果,主要有一般輪詢算法、基于比率的加權(quán)輪詢算法以及基于優(yōu)先級(jí)的加權(quán)輪詢算法等。動(dòng)態(tài)負(fù)載均衡算法在較為復(fù)雜的網(wǎng)絡(luò)環(huán)境中適應(yīng)性更強(qiáng),效果更好,主要有基于任務(wù)量的最少連接優(yōu)先算法、基于性能的最快響應(yīng)優(yōu)先算法、預(yù)測(cè)算法及動(dòng)態(tài)性能分配算法等。

網(wǎng)絡(luò)負(fù)載均衡技術(shù)的大致原理是利用一定的分配策略將網(wǎng)絡(luò)負(fù)載平衡地分?jǐn)偟骄W(wǎng)絡(luò)集群的各個(gè)操作單元上,使得單個(gè)重負(fù)載任務(wù)能夠分擔(dān)到多個(gè)單元上并行處理,或者使得大量并發(fā)訪問(wèn)或數(shù)據(jù) 流量分擔(dān)到多個(gè)單元上分別處理,從而減少用戶的等待響應(yīng)時(shí)間。

Nginx服務(wù)器負(fù)載均衡配置

Nginx服務(wù)器實(shí)現(xiàn)了靜態(tài)的基于優(yōu)先級(jí)的加權(quán)輪詢算法,主要使用的配置是proxy_pass指令和upstream指令,這些內(nèi)容實(shí)際上很容易理解,關(guān)鍵點(diǎn)在于Nginx服務(wù)器的配置靈活多樣,如何在配置負(fù)載均衡的同時(shí)合理地整合其他功能,形成一套可以滿足實(shí)際需求的配置方案。

下面的有一些基礎(chǔ)示例片段,當(dāng)然不可能將所有的配置情況包括在內(nèi),希望能夠起到拋磚引玉的效果,同時(shí)也需要大家在實(shí)際應(yīng)用過(guò)程中多總結(jié)多積累。在配置中需要注意的地方將以注釋的形式添加。

配置實(shí)例一:對(duì)所有請(qǐng)求實(shí)現(xiàn)一般輪詢規(guī)則的負(fù)載均衡

     在以下實(shí)例片段中,backend服務(wù)器組中所有服務(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ù)載均衡。實(shí)例代碼如下:

...
 
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.htm;
    location / {
        proxy_pass http://backend;
        prox_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)值”。其中,192.168.1.2:80的級(jí)別最高,優(yōu)先接收和處理客戶端請(qǐng)求;192.168.1.4:80的級(jí)別最低,是接收和處理客戶端請(qǐng)求最少的服務(wù)器,192.168.1.3:80將介于以上兩者之間。所有訪問(wèn)www.myweb.name的請(qǐng)求都會(huì)在backend服務(wù)器組中實(shí)現(xiàn)加權(quán)負(fù)載均衡。實(shí)例代碼如下:

...
 
upstream backend                    #配置后端服務(wù)器組
{
    server 192.168.1.2:80 weight=5;
    server 192.168.1.3:80 weight=2;
    server 192.168.1.4:80;          #默認(rèn)weight=1
}
server
{
    listen 80;
    server_name www.myweb.name;
    index index.html index.htm;
    location / {
        proxy_pass http://backend;
        prox_set_header Host $host;
    }
    ...
}

配置實(shí)例三:對(duì)特定資源實(shí)現(xiàn)負(fù)載均衡

在該實(shí)例片段中,我們?cè)O(shè)置了兩組被代理的服務(wù)器組,名為“videobackend”的一組用于對(duì)請(qǐng)求video資源的客戶端請(qǐng)求進(jìn)行負(fù)載均衡,另一組用于對(duì)請(qǐng)求filed資源的客戶端請(qǐng)求進(jìn)行負(fù)載均衡。所有對(duì)“http://www.mywebname/video/* ”的請(qǐng)求都會(huì)在videobackend服務(wù)器組中獲得均衡效果,所有對(duì)“http://www.mywebname/file/* ”的請(qǐng)求都會(huì)在filebackend服務(wù)器組中獲得均衡效果。該實(shí)例中展示的是實(shí)現(xiàn)一般負(fù)載均衡的配置,對(duì)于加權(quán)負(fù)載均衡的配置可以參考“配置實(shí)例二”。

    在location /file/ {......}塊中,我們將客戶端的真實(shí)信息分別填充到了請(qǐng)求頭中的“Host”、“X-Real-IP”和“X-Forwareded-For”頭域,這樣后端服務(wù)器組收到的請(qǐng)求中就保留了客戶端的真實(shí)信息,而不是Nginx服務(wù)器的信息。實(shí)例代碼如下:

...
 
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.htm;
    location /video/ {
        proxy_pass http://videobackend; #使用后端服務(wù)器組1
        prox_set_header Host $host;
        ...
    }
    location /file/ {
        proxy_pass http://filebackend;  #使用后端服務(wù)器組2
                                        #保留客戶端的真實(shí)信息
        prox_set_header Host $host;
        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ù)載均衡

在該實(shí)例片段中,我們?cè)O(shè)置了兩個(gè)虛擬服務(wù)器和兩組后端代理的服務(wù)器組,分別用來(lái)接收不同的域名請(qǐng)求和對(duì)這些請(qǐng)求進(jìn)行負(fù)載均衡處理。如果客戶端請(qǐng)求域名為“home.myweb.name”,則服務(wù)器server1接收并轉(zhuǎn)向homebackend服務(wù)器組進(jìn)行負(fù)載均衡處理;如果客戶端請(qǐng)求域名為“bbs.myweb.name”,則由服務(wù)器server2接收bbsbackend服務(wù)器級(jí)進(jìn)行負(fù)載均衡處理。這樣就實(shí)現(xiàn)了對(duì)不同域名的負(fù)載均衡。

需要注意兩組后端服務(wù)器組中有一臺(tái)服務(wù)器server 192.168.1.4:80是公用的。在該服務(wù)器上需要部署兩個(gè)域名下的所有資源才能保證客戶端請(qǐng)求不會(huì)出現(xiàn)問(wèn)題。實(shí)例代碼如下:

...
upstream bbsbackend                    #配置后端服務(wù)器組1
{
    server 192.168.1.2:80 weight=2;
    server 192.168.1.3:80 weight=2;
    server 192.168.1.4:80;
}
upstream homebackend                    #配置后端服務(wù)器組2
{
    server 192.168.1.4:80;
    server 192.168.1.5:80;
    server 192.168.1.6:80;
}
                                        #開始配置server 1
server
{
    listen 80;
    server_name home.myweb.name;
    index index.html index.htm;
    location / {
        proxy_pass http://homebackend;
        prox_set_header Host $host;
        ...
    }
    ...
}
                                        #開始配置server 2
server
{
    listen 80;
    server_name bbs.myweb.name;
    index index.html index.htm;
    location / {
        proxy_pass http://bbsbackend;
        prox_set_header Host $host;
        ...
    }
    ...
}

配置實(shí)例五:實(shí)現(xiàn)帶有URL重寫的負(fù)載均衡

    首先,我們來(lái)看具體的源碼,這是在實(shí)例一的基礎(chǔ)上做的修改:

...
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.htm;
     
    location /file/ {
        rewrite ^(/file/.*)/media/(.*)\.*$) $1/mp3/$2.mp3 last;
    }
     
    location / {
        proxy_pass http://backend;
        prox_set_header Host $host;
    }
    ...
}

該實(shí)例片段與“配置一”相比,增加了對(duì)URI包含“/file/”的URL重寫功能。例如客戶端請(qǐng)求的URL為“http://www.myweb.name/file/downlaod/media/1.mp3 ”時(shí),該虛擬服務(wù)器首先使用location file/ {......}塊轉(zhuǎn)發(fā)到后端的backend服務(wù)器組中實(shí)現(xiàn)負(fù)載均衡。這樣,就車輕而易舉地實(shí)現(xiàn)了帶有URL重寫功能的負(fù)載均衡。在該配置方案中,一定要掌握清楚rewrite指令中l(wèi)ast標(biāo)記和break標(biāo)記的區(qū)別,才能達(dá)到預(yù)計(jì)的效果。

以上5個(gè)配置實(shí)例展示了Nginx服務(wù)器實(shí)現(xiàn)不同情況下負(fù)載均衡配置的基本方法。由于Nginx服務(wù)器的功能在結(jié)構(gòu)上是增量式的,因此 ,我們可以在這些配置的基礎(chǔ)上繼續(xù)添加更多功能,比如Web緩存等功能,以及Gzip壓縮技術(shù)、身份認(rèn)證、權(quán)限管理等。同時(shí)在使用upstream指令配置服務(wù)器組時(shí),可以充分發(fā)揮各個(gè)指令的功能,配置出滿足需求、高效穩(wěn)定、功能豐富的Nginx服務(wù)器。

關(guān)于如何在Nginx中配置負(fù)載均衡問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI