Nginx的upstream詳解

分配方式

Nginx的upstream支持5種 分配方式,其中 輪詢、權重、IP散列這三種為Nginx原生支持的分配方式,fair 和 url_hash 為第三方支持的分配方式。


1,輪詢

輪詢是upstream的默認分配方式,即每個請求按照時間順序輪流分配到不同的后端服務器,如果某個后端服務器 down 掉后,能自動剔除。

upstream zhang21(名稱){

? ? server 192.168.1.11:8888;

? ? ?server 192.168.1.22:8888;

? ? server 192.168.1.33:8888;

}


2,weight(權重)

輪詢的加強版,既可以指定輪詢比率,weight 和訪問幾率成正比,主要應用于后端服務器異質的場景下。

upstream zhang21 {

? ? server 192.168.1.11 weight=1;

? ? server 192.168.1.22 weight=2;

? ? server 192.168.1.33 weight=3;

}


3,ip_hash

每個請求按照訪問 Ip(即Nginx的前置服務器或客戶端IP)的 hash結果分配,這樣每個訪客會固定訪問一個后端服務器,可以解決 session 一致問題。

upstream zhang21 {

? ? ip_hash;

? ? server 192.168.1.11:7777;

? ? server 192.168.1.22:8888;

? ? server 192.168.1.33:9999;

}


4,fair

fair顧名思義,公平地按照后端服務器的響應時間(rt)來分配請求,響應時間(rt)小的后端服務器優先分配請求。

upstream zhang21 {

? ? server 192.168.1.11;

? ? server 192.168.1.22;

? ? server 192.168.1.33;

}


5,url_hash

與 ip_hash類似,但是按照訪問 url 的 hash 結果來分配請求,使得每個 url 定向到同一個后端服務器,主要應用于后端服務器為緩存的場景下。

upstream zhang21 {

? ? server 192.168.1.11;

? ? server 192.168.1.22;

? ? server 192.168.1.33;

? ?hash $request_uri;

? ? hash_method crc32;

}

其中,hash_method為使用的hash算法,需要注意,此時server語句中不能添加 weight等參數。


設備狀態

從上面可以看出upstream中server指令語法如下:

server ?address ?[ parameters ]

address可以是主機名、域名、ip或Unix Socket,也可以指定端口號;

parameters表示可選參數,有如下這些:

down,表示當前server已停用;

backup,表示當前server是備用服務器,只有其它非backup后端服務器都掛掉了或很忙才會分配請求給它;

weight,表示當前server負載權重,權重越大幾率愈高;

max_fails 和 fail_timeout 一般會關聯使用,如果某臺server在 fail_timeout 時間內出現了 max_fails 次連接失敗,那么Nginx會認為其已經掛掉,從而在 fail_timeout 時間內不再去請求它,fail_timeout默認是 10s,max_fails默認是1,即默認情況只要是發生錯誤就認為服務器掛了,如果將max_fails設置為0,則表示取消這項檢查。


舉個栗子

四臺主機,一臺處理轉發,另外三臺為后端處理服務器。

192.168.1.11 ? ?#前

192.168.1.22

192.168.1.33

192.168.1.44

在 1.11上的簡單配置

在nginx.conf的http{ }下;

upstream zhang21 {

server 192.168.1.22;

server 192.168.1.33;

server 192.168.1.44;

}

在虛擬主機server { } 中配置;

location / {

? ? root html;

? ? index index.html index.htm;

? ? proxy_pass http://zhang21(upstream名稱);

}


在三臺后臺主機上的簡單配置

配置虛擬主機server { };

server {

? ? listen 80;

? ? root /var/www;

? ? location / {

? ? ? ? fastcgi_pass? 127.0.0.1:9000;

? ? ? ? fastcgi_index? index.php;

? ? ? ? fastcgi_param? SCRIPT_FILENAME? $document_root/$fastcgi_script_name;

? ? ? ? include? ? ? ? fastcgi_params;

? ? }

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx?那么一定聽過它的“同行”Apache吧!Ngi...
    JokerW閱讀 32,769評論 24 1,002
  • 上一篇《WEB請求處理一:瀏覽器請求發起處理》,我們講述了瀏覽器端請求發起過程,通過DNS域名解析服務器IP,并建...
    七寸知架構閱讀 81,159評論 21 356
  • ######Nginx配置文件nginx.conf中文詳解##### #定義Nginx運行的用戶和用戶組 user...
    憶飛閱讀 782評論 0 0
  • 以下內容來自官方文檔 http://nginx.org/en/docs/http/ngx_http_upstrea...
    再回到從前閱讀 2,711評論 0 1
  • 春節將至,各單位門前紅燈高掛,彩旗招展,雖是千篇一律,卻也烘托出年節將至的紅火,遠處時時鳴響的炮聲也是添著喜氣。每...
    陌上紫煙閱讀 477評論 0 0