1、分配方式
Nginx的upstream支持5種分配方式,下面將會詳細介紹,其中,前三種爲Nginx原生支持的分配方式,後兩種爲第三方支持的分配方式:nginx
一、輪詢
輪詢是upstream的默認分配方式,即每一個請求按照時間順序輪流分配到不一樣的後端服務器,若是某個後端服務器down掉後,能自動剔除。
upstream backend {
server 192.168.1.101:8888;
server 192.168.1.102:8888;
server 192.168.1.103:8888;
}算法
二、weight
輪詢的增強版,便可以指定輪詢比率,weight和訪問概率成正比,主要應用於後端服務器異質的場景下。
upstream backend {
server 192.168.1.101 weight=1;
server 192.168.1.102 weight=2;
server 192.168.1.103 weight=3;
}後端
三、ip_hash
每一個請求按照訪問ip(即Nginx的前置服務器或者客戶端IP)的hash結果分配,這樣每一個訪客會固定訪問一個後端服務器,能夠解決session一致問題。
upstream backend {
ip_hash;
server 192.168.1.101:7777;
server 192.168.1.102:8888;
server 192.168.1.103:9999;
}緩存
四、fair
fair顧名思義,公平地按照後端服務器的響應時間(rt)來分配請求,響應時間短即rt小的後端服務器優先分配請求。
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
server 192.168.1.103;
fair;
}服務器
五、url_hash
與ip_hash相似,可是按照訪問url的hash結果來分配請求,使得每一個url定向到同一個後端服務器,主要應用於後端服務器爲緩存時的場景下。
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
server 192.168.1.103;
hash $request_uri;
hash_method crc32;
}
其中,hash_method爲使用的hash算法,須要注意的是:此時,server語句中不能加weight等參數。
關於,如何在負載均衡中使用upstream請參看這裏。session
2、設備狀態
從上面實例不難看出upstream中server指令語法以下:
server address [parameters]
關鍵字server必選。
address也必選,能夠是主機名、域名、ip或unix socket,也能夠指定端口號。
parameters是可選參數,能夠是以下參數:
down:表示當前server已停用
backup:表示當前server是備用服務器,只有其它非backup後端服務器都掛掉了或者很忙纔會分配到請求。
weight:表示當前server負載權重,權重越大被請求概率越大。默認是1.
max_fails和fail_timeout通常會關聯使用,若是某臺server在fail_timeout時間內出現了max_fails次鏈接失敗,那麼Nginx會認爲其已經掛掉了,從而在fail_timeout時間內再也不去請求它,fail_timeout默認是10s,max_fails默認是1,即默認狀況是隻要發生錯誤就認爲服務器掛掉了,若是將max_fails設置爲0,則表示取消這項檢查。
舉例說明以下:
upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
}負載均衡
如何引用呢? 以下socket
location /router/
{
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;url
}代理
如下能夠解決只有一個合法的業務域名的問題
location /test/router
{
proxy_pass http://test.yl.66huyu.cn/router;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
如何作遊戲多區多服的https的反向代理設置:
location /zone {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
proxy_pass http://$arg_host:$arg_port;
}
客戶端請求 :wss://www.ooxx.com/zone?host=134.175.33.159&port=8888
nginx自動會把參數加arg_前綴,代理向ttp://$arg_host:$arg_port,則客戶端自動就連向了http://134.175.33.151:8888