nginx怎么負載均衡

nginx怎么負載均衡

一、nginx反向代理

在介紹nginx的負載均衡之前,我們先來介紹nginx的反向代理,因為反向代理用的比較多,所以,這里我們就不介紹正向代理了。

nginx的代理過程,就是將請求發(fā)送給nginx,然后將請求轉(zhuǎn)發(fā)給后端服務(wù)器,后端服務(wù)器處理完畢之后將結(jié)果再發(fā)給nginx,nginx再把結(jié)果發(fā)送給客戶端。后端服務(wù)器可在遠程也可在本地,也可以是nginx服務(wù)器內(nèi)部定義的其他虛擬主機。這些接收nginx轉(zhuǎn)發(fā)的服務(wù)器被稱為上游(upstream)

使用nginx做代理的目的之一是擴展基礎(chǔ)架構(gòu)的規(guī)模。nginx可以處理大量并發(fā)連接,請求到來后,nginx可將其轉(zhuǎn)發(fā)給任意數(shù)量的后臺服務(wù)器進行處理,這等于將負載均衡分散到整個集群。

語法:proxy_pass URL

解釋:URL的形式可以如下:http://location:8000/uri/等,可在location中進行配置。

例:我們來寫一個簡單的反向代理:

在我80端口監(jiān)聽的目錄下沒有test_proxy的文件,但在我8080端口監(jiān)聽目錄下有,我在80端口的server里面添加如下內(nèi)容:

location ~ /test_proxy.html$ {proxy_pass http://127.0.0.1:8080;}

然后在瀏覽器上輸入http://IP地址/test_proxy.html,會出現(xiàn)請求的信息,實際上是80端口轉(zhuǎn)發(fā)給了8080端口并把數(shù)據(jù)請求了回來。

二、緩沖

nginx也提供了緩沖的機制,用于提高性能。沒有緩沖的情況下,數(shù)據(jù)直接從后端服務(wù)器發(fā)送給客戶端。緩沖的作用是在nginx上臨時存儲來自后端服務(wù)器的處理結(jié)果,從而可以提早關(guān)閉nginx到后端的連接,減少IO的損耗。一般內(nèi)容存放在內(nèi)存當(dāng)中,但當(dāng)內(nèi)容過多,造成的內(nèi)存不夠時,會把內(nèi)容存放在臨時文件目錄下。下面是一些常用的緩沖的配置項,可以再http、server和location內(nèi)容塊下。

proxy_buffering:控制本內(nèi)容塊下是否啟用緩沖,默認(rèn)是”on”。

proxy_buffers:有兩個參數(shù),第一個控制緩沖區(qū)請求數(shù)量,第二個控制緩沖區(qū)大小。默認(rèn)值為8個、一頁(一般是4k或8k)。這個值越大,緩沖的內(nèi)容越多。

proxy_buffer_size:后端回復(fù)結(jié)果的首段(包含header的部分)是單獨緩沖的,此配置就是配置這部分緩沖區(qū)的大小。這個值默認(rèn)與proxy_buffer的值相同,我們可以把它設(shè)置得小一些,因為header內(nèi)容一般比較少。

proxy_busy_buffers_size:設(shè)置被標(biāo)記為”client-ready”(客戶端就緒)的緩沖區(qū)大小。客戶端一次只能從一個緩沖讀取數(shù)據(jù),而緩沖是按照隊列次序被分批發(fā)送給客戶端的。此語法配置的就是這個隊列的大小。

proxy_temp_path:定義nginx存儲臨時文件路徑。

proxy_max_temp_file_size:每個請求可以存儲臨時文件的目錄大小。如果上游發(fā)來的結(jié)果太大以至于無法放入一個緩沖,則nginx會為其創(chuàng)建臨時文件。

三、負載均衡

配置語法:upstream name {…….}

解釋:name是自定義的一個名字,而{}則是需要定義的內(nèi)容,只能在http塊定義,不能在server塊里定義。定義完之后可在location塊下寫入如下代碼進行調(diào)用:http://name。

例:由于服務(wù)器數(shù)量的限制,此處我們是用一臺服務(wù)器的不同的端口來模擬負載均衡,當(dāng)然,多臺的配置也是差不多的。

在server塊內(nèi)加入如下代碼:

upstream test {#ip_hash?server IP:8001;?server IP:8002;?server IP:8003;}

然后,我們在http塊內(nèi)的location中加入如下內(nèi)容:

location / {#設(shè)置主機頭和客戶端真實地址,以便服務(wù)器獲取客戶端真實IPproxy_set_header Host $http_host;?proxy_set_header X-Real-IP $remote_addr;?proxy_connect_timeout 30;#設(shè)置連接超時時間為30sproxy_send_timeout 60;?proxy_read_timeout 60;?proxy_buffer_size 32k; #設(shè)置緩沖區(qū)大小?proxy_buffering on; #開啟緩沖區(qū)?proxy_buffers 4 128k; #設(shè)置緩沖區(qū)的數(shù)目和大小?proxy_busy_buffers_size 256k; #設(shè)置客戶端就緒緩沖區(qū)大小?proxy_max_temp_file_size 256k;?proxy_pass http://test; #調(diào)用上面設(shè)置的負載均衡?}

當(dāng)然,得提醒一下,我們設(shè)置的IP的端口是事先在配置文件里配置好的。例如如下的配置。

nginx怎么負載均衡

然后,我們訪問我們的主機地址,然后不斷的刷新,會發(fā)現(xiàn)出來每個端口出來的頁面信息。默認(rèn)的負載均衡采用的是輪詢的方式。

如果是用的不同的服務(wù)器進行負載均衡的話,只需稍稍改改,就例如如下配置:

upstream mydomain.com{server 47.95.242.167:80;?server 47.95.242.168:80;?server 47.95.242.169:80;}

配置完之后呢,剩下的在http里的代碼和上面的相似,然后在其他的三個服務(wù)器那里進行如下配置。當(dāng)然,我們還得在那三個服務(wù)器那里的防火墻進行設(shè)置。

server{listen 80;?server_name www.mydomain.com;?index index.htm index.php index.html;?root 目錄路徑;}

①后端服務(wù)器在負載均衡調(diào)度中的狀態(tài)

dowm:當(dāng)前的server暫時不參與負載均衡。

backup:預(yù)留的備份服務(wù)器。

max_fails:允許請求失敗的次數(shù)。

fail_timeout:經(jīng)過max_fails失敗后,服務(wù)器暫停的時間。

max_conns:限制最大的接收連接數(shù)。

注:以上的配置都是在upstream的時候配置的,例如在{}里面加入的server IP:8001 dowm,就表示這個服務(wù)是不參與負載均衡的,用來做備 份的,以上配置都是寫在服務(wù)的后面。

②調(diào)度算法

輪詢:按時間順序逐一分配到不同的后端服務(wù)器。

加權(quán)輪詢:可在配置的server后面加個weight=number,number值越高,分配的概率越大。

ip_hash:每個請求按訪問IP的hash分配,這樣來自同一IP固定訪問一個后臺服務(wù)器。

least_hash:最少鏈接數(shù),哪個機器連接數(shù)少就發(fā)分發(fā)給哪個機器。

url_hash:按訪問的url的hash結(jié)果分配請求,是每個url定向到同一后端服務(wù)器上。

hash關(guān)鍵值:hash自定義的key。

注:調(diào)度算法在設(shè)置upstream中配置,例如在此大括號里面寫入ip_hash表示使用ip_hash的方式分配

更多Nginx相關(guān)技術(shù)文章,請訪問Nginx教程欄目進行學(xué)習(xí)!

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊15 分享