一、普通輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務器,如果后端某台服務器宕機,故障系統被自動剔除,使用戶訪問不受影響。
upstream api { server 192.168.0.1:8081; server 192.168.0.2:8081; }
二、加權輪詢
weight 指定輪詢的權值,weight值越大,分配到的訪問機率越高,此策略主要用於后端每個服務器性能不均的情況下。
upstream api { server 192.168.0.1:8081 weight=10; server 192.168.0.2:8081 weight=20;#被訪問記錄大 }
三、ip_hash
每個請求按訪問IP的hash結果分配,這樣來自同一個IP的訪客固定訪問一個后端服務器,可以解決session不能跨服務器的問題。當然如果這個節點不可用了,會發到下個節點,而此時沒有session同步的話就注銷掉了。
upstream api { ip_hash; server 192.168.0.1:8081; server 192.168.0.2:8081; }
四、least_conn
請求被發送到當前活躍連接最少的后端服務器。會考慮weight的值。如果有多個后端服務器的 conns 值同為最小的,那么對它們采用加權輪詢算法(weight)。
upstream api { least_conn; server 192.168.0.1:8081; server 192.168.0.2:8081; }
五、fair
根據后端服務器的響應時間來分配請求,響應時間短的優先分配。Nginx本身是不支持 fair 的,如果需要使用這種調度算法,必須下載Nginx的 upstream_fair 模塊。
upstream api { server 192.168.0.1:8081; server 192.168.0.2:8081; fair; }
六、url_hash
此方法按訪問 url 的 hash 結果來分配請求,使每個 url 定向到同一個后端服務器,可以進一步提高后端緩存服務器的效率。Nginx 本身是不支持 url _ hash 的,如果需要使用這種調度算法,必須下載 Nginx 的 nginx_upstream_hash 模塊。
upstream api { server 192.168.0.1:8081; server 192.168.0.2:8081; hash $request_uri; hash_method crc32; }