Nginx經常使用配置參數有upstream,主要用於均衡後端多個實例。java
Nginx的upstream 目前支持5種算法分配方式:nginx
1)輪詢(默認rr round robin)算法
將請求按時間順序逐一分配到後端不一樣服務器,若是後端某臺服務器down掉,就會自動剔除,待恢復自動添加上。後端
2)weight 權重服務器
指定輪詢權重,權重越高,處理的請求就越多,weight和訪問比率成正比,用於後端服務器性能不均的狀況。session
3)ip_hashapp
每一個請求根據訪問的IP的hash結果分配,這樣每一個訪客固定訪問一個後端服務器,能夠解決session的問題,通常用於登陸會話。負載均衡
4)fail (第三方)tcp
按後端服務器的響應時間來分配請求,響應時間短的優先分配。性能
5)url_hash (第三方)
upstream 的fail_timeout和max_fails 參數是用來判斷負載均衡upstream中的某個server是否失效
在fail_timeout時間內,nginx和upstream中的某個server的鏈接嘗試失敗了max_fails次,在nginx會認爲server已經失效,在接下來fail_timeout時間內,nginx再也不將請求轉發給失效的server
例如:
upstream app {
server 192.168.91.129:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.91.130:8080 weight=1 max_fails=2 fail_timeout=30s;
}
app均衡後臺java服務,30s秒內nginx會與後端某個server通訊檢測,若是在檢測鏈接失敗次數超過2次,會認定失效,剔除列表,nginx再也不將請求轉發給失效的server,
fail_timeout設置時間對響應時間沒有影響,這個響應時間是用 proxy_connect_timeout和proxy_read_timeout來控制的。
proxy_connect_timeout:Nginx與後端服務器鏈接的超時時間,發起握手等待響應超時時間。
proxy_read_timeout:鏈接成功後——等待後端服務器響應時間,其實已經進入後端排隊之中等待處理(也能夠說是後端服務器處理請求的時間)
proxy_send_timeout 後端服務器數據回傳時間,在規定時間以內後端服務器必須傳完全部數據。
keepalive_timeout:一個http產生的tcp鏈接在傳送完最後一個響應後,還須要等待多少秒後,才關閉這個鏈接。