基于 ${nginx_home}/conf/nginx.conf
文件配置實現,如下:
http {# 定義server地址upstream server_group {server 192.168.xxx.1:8080;server 192.168.xxx.2:8080;server 192.168.xxx.3:8080;}server {listen 80;location / {root html;index index.html index.htm; # 代理轉發,基于定義的 server_group 配置實現負載均衡proxy_pass http://server_group; }}
}
負載參數配置
其中,upstream server_group配置的是負分發服務器組的地址。服務負載默認輪詢負載,也支持參數化自定義負載配置:weight、backup、max_fails、fail_timeout
等。例如:
upstream server_group {server 192.168.xxx.1:8080 backup;server 192.168.xxx.2:8080 weight=1;server 192.168.xxx.3:8080 max_fails=3 fail_timeout=15s;
}
輪詢[默認]
該策略會將每個請求按時間順序逐一分配到不同的后端服務器,如果某個后端服務器 down 掉,自動從輪詢列表中剔除該服務。
權重(weight)
該策略指定每個服務的權重比例,權重越高被分配的客戶端(請求)也就越多,weight 和訪問比率成正比。
weight
:指定輪詢權值,默認值為1。常用于服務主機性能不統一,將性能好的主機分配高權重來發揮服務器最大性能。
down
:表示當前的server暫時不參與負載均衡。
fail_timeout
:單位為秒,默認是10秒。指定一段時間內,請求經歷了max_fails次失敗后,該server不能訪問的時間(暫停服務的時間)。max_fails可以和fail_timeout一起使用:預留的備份機器。當其他所有的非backup機器故障或忙時,才會請求backup機器,因此這臺機器的壓力最輕。
max_fails
:在fail_timeout時間范圍內,允許請求的最大失敗次數,默認為1。當達到最大失敗次數時,會在fail_timeout時間內不再次被選擇,返回 proxy_next_upstream 模塊定義的錯誤。
fail_timeout
:單位為秒,默認是10秒。在指定時間內,請求max_fails次失敗后,該server不能訪問的時間(暫停服務的時間)。max_fails和 fail_timeout一起使用。
最少連接(least_conn)
該策略會將請求分配到連接數最少的服務上。
upstream server_group {least_conn;server 192.168.xxx.1:8080;server 192.168.xxx.2:8080;
}
哈希(ip_hash)
該策略按照每個請求 ip 的 hash 結果分配后端服務器,導致每個訪客會固定訪問一個后端服務器。可解決了動態網頁存在的session共享問題。
地址哈希法:根據獲取的客戶端ip地址,通過哈希函數計算得到一個定長hash值,然后使用這個值來決定將請求分配給哪臺后端服務器。采用源地址哈希法進行負載均衡,同一ip地址的客戶端,在后端服務器列表不變情況下,其每次請求都會映射到同一臺服務器訪問。
哈希值映射:將哈希值映射到可用的后端服務器。通常,哈希值與后端服務器的數量相除并取余數,以次確定要將請求分配到哪臺服務器。
例如:如果有3臺后端服務器,哈希值為12,則計算:12 % 3 = 0,那么請求將路由到第一臺后端服務器
。
upstream server_group {ip_hash;server 192.168.xxx.1:8080;server 192.168.xxx.2:8080;
}
轉發請求頭配置
location / {root html;index index.html index.htm; # 代理轉發,基于定義的 server_group 配置實現負載均衡proxy_pass http://server_group; proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Real-PORT $remote_port;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}