Nignx 模組 - upstream

Nginx 模組可分成三類: handler, filter 以及 upstream

handler 以及 filter 主要用於單機,可以讓 Nginx 方便的管理單機運作。

upstream 則是主要用於分布式的處理,負責處理連線請求及代理。

從根本來說,upstream 其實是屬於 handler 的一部份,

他主要的工作是負責將請求轉發到 nginx 內部

配置的方式如下:

設定 upstream 節點

例如:

upstream mynote {
    server 10.0.3.25:3080;
    server 10.0.0.87:8299;
}

設定 location 配置 proxy

透過 location / ,當請求來源在 location 節點時,會透過 proxy_pass 來進行代理,處理轉發的動作

在 proxy_pass 的配置會是 http://[upstream 名稱]

設定完成後,預設會以輪流的方式來分配請求到設定的主機

例如:

location / {
    root html;
    index index.html index.htm index.php;
	proxy_pass http://mynote;
}

進階設定

在上述設定完成後,基本的負載平衡也就完成了,接下來介紹其他設定參數:

前面,我們設定 upstream ,當請求過來時, 會輪流往不同的 內部serverip 發送

對此,還有其他參數可以使用

fair  //依照server回應的速度(時間)來分配,回應速度快的優先
down  // 指定server,暫時不提供服務
weight  //權重,當後端 server 設定優先分派的 server ,權重高的訪問率會越高
max_fails //請求失敗次數
fail_timeout //請求失敗達到最大次數後,需要暫停的時間
backup  // 備援機器(通常會較輕便簡潔)
ip_hash //會記住來源 ip ,當下次請求時,會轉導向之前訪問過的 server
hash_method  //依照 hash 算法,按照 url 的 hash 結果分配請求(後端做緩存時才會比較有效)

例如:

upstream mynote{
	ip_hash;
    server 10.0.3.25:3080 down;
    server 10.0.0.87:8299 weight=10;
    server 10.0.0.12:3462 weight=20;
    server 10.0.0.33:2452 backup;
}
upstream mynote {
    server 10.0.3.25:3080;
    server 10.0.0.87:8299;
    fair;
}

要留意的是,如果設定 hash_method 時,不能使用 weight 以及其他參數

upstream mynote {
    server 10.0.3.25:3080;
    server 10.0.0.87:8299;
    hash $request_uri;
    hash_method crc32;
}

缺點分析

以上設定方式,可以簡單快速的完成負載平衡,

但是這樣的設定再分配及可靠性都不高,通常會適用於圖片伺服器或靜態網頁群集設定。