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;
}
缺點分析
以上設定方式,可以簡單快速的完成負載平衡,
但是這樣的設定再分配及可靠性都不高,通常會適用於圖片伺服器或靜態網頁群集設定。