Nginx其中一大特性就是負載均衡,它能夠經過擴展它代理的鏈接來保護你的上游服務器免於過載等問題。算法
1. 輪詢 rountd-robin ):
在默認狀況下,使用輪詢算法,它能夠不須要配置指令來啓用它。該算法選擇下一個服務器,基於先前選擇,在配置文件中哪個是下一個服務器,以及每個服務器的負載權重。輪詢算法是基於在隊列中誰是下一個的原理確保將訪問量均勻地分配給每個上游服務器的。
2. IP哈希(IP hash):
經過ip_hash指令啓用它,從而將某些IP地址映射到同一個上游服務器。Nginx經過IPv4地址的前3個字節或整個IPv6地址做爲哈希鍵來實現,同一個IP地址池地址老是被映射到同一個上游服務器,因此,這個機制的目的不是要確保公平分配給每個上游服務器,而是在客戶端和上游服務器之間實現一致映射,在上游服務器中,主要應用在具備會話的應用中很是有用。
3. 最少鏈接數(Least Connection):
經過least_conn指令啓用,該算法的目的是經過選擇一個活躍的最少鏈接數服務器,而後將負載均衡均勻分配給上游服務器。若是上游服務器服務器的處理器能力不相同,那麼能夠爲server指令使用weight參數來控制權重,該算法主要應用在不一樣服務器配置中。服務器
upstream servers { server 127.0.0.1:8080 weith=1 max_fails=3 fail_timeout=1; server 127.0.0.1:8081 weith=2 max_fails=3 fail_timeout=1; server 127.0.0.1:8082 down; # 下線(不可用) server 127.0.0.1:8083 backup; # 備份 } server { location / { # 獲取客戶端真實ip地址 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 針對超時無響應的上游服務器應該被迅速處理掉,具體看應用程序 proxy_connect_timeout 5; proxy_read_timeout 10; proxy_send_timeout 10; proxy_pass http://servers; } }
- down 表示該server臨時不參與負載;
- weight 默認值爲1,當weight越大,負載的權重就越大;
- max_fails 表示同時請求失敗的次數爲1,當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤.
- fail_timeout 表示max_fails次失敗後,暫停的時間;
- backup 表示當其餘所有的非backup機器down或者忙的時候,纔會去請求backup機器,因此這臺機器壓力會最輕。