- upstream
nginx upstream語法配置
upstream 后面跟服務名
其中包含了,域名,端口 以及權重,可以看到他既支持http協議也支持socket協議的類型,backup意味着該域名是備用的地址
后端服務器調度參數
backup不參與服務,當其他節點無法服務了,他就參與服務
max_fails 代理服務器向后端請求,一旦發現請求狀態失敗,會去再度請求。超過max_fails規定的次數,隨即宣告失敗。
接下來就“休息一會兒”,通常為10s 可以通過fail_timeout設置更長的時間
max_conns 由於nginx向upstram(服務器池)采用輪詢的方式,分發請求,有的時候我們會遇到連接池中的服務器硬件性能高低不一,有的是4核,有的是24核,配置低的服務器可能根本接收不了分攤給他的請求數目。這個時候就用到了max_conns配置
上圖配置解讀:8001 不提供服務;8002備用服務器;8003失敗檢查只執行1次,超時時間10s,結果只有8003對應的server3可以訪問
在過濾規則中停掉8003
這時作為backup的server2可以返回。
- nginx的輪詢機制(基於請求的方式)
nginx的輪詢默認采用逐一輪詢的方式,例如測試用例中從8001輪詢到8003
加權輪詢的調度算法:如果來7個請求,5個將會落到8002上面
重新加載配置
然而這一方法帶來的問題是:如果很多操作或訪問是基於cookie或者session的,輪詢會打到不同的服務器上去,session和cookie也就無從保持,導致了掉線
- ip_hash
緩存帶來的問題,假如server1 server2各緩存了一部分信息,輪詢可能每次跳到不同的服務器,導致每次加載的緩存內容都不一致。
根據客戶訪問ip的哈希值綁定在一個后端服務器上,同一ip固定訪問同一服務器,缺陷:由於是代理,無法獲取真正的$remote_addr,於是改進版本的nginx有了
- url_hash(1.7.2以后版本推出)
關鍵命令: hash $request_uri 變量指代的就是
測試結果,無論如何都會固定展示綁定的那台服務器的內容
如果針對url中的某一個值進行hash也是可以