Nginx基於連接探測,如果發現后端異常,在單位周期為fail_timeout設置的時間,中達到max_fails次數,這個周期次數內,如果后端同一個節點不可用,那么接將把節點標記為不可用,並等待下一個周期(同樣時常為fail_timeout)再一次去請求,判斷是否連接是否成功。如果成功,將恢復之前的輪詢方式,如果不可用將在下一個周期(fail_timeout)再試一次。
#注:proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區 proxy_temp_path /data0/proxy_temp_dir; #設置Web緩存區名稱為cache_one,內存緩存空間大小為200MB,1天沒有被訪問的內容自動清除,硬盤緩存空間大小為30GB。 proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g; #輪詢服務器,weight為服務器權重,與訪問頻率成正比,max_fails最大超時次數,fail_timeout服務器代理監聽超時時間 upstream backend_server { server 192.168.203.43:80 weight=1 max_fails=2 fail_timeout=30s; server 192.168.203.44:80 weight=1 max_fails=2 fail_timeout=30s; server 192.168.203.45:80 weight=1 max_fails=2 fail_timeout=30s; } server { listen 80; server_name www.yourdomain.com 192.168.203.42; index index.html index.htm; root /data0/htdocs/www; location / { #如果后端的服務器返回502、504、執行超時等錯誤,自動將請求轉發到upstream負載均衡池中的另一台服務器,實現故障轉移。 proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_cache cache_one; #對不同的HTTP狀態碼設置不同的緩存時間 proxy_cache_valid 200 304 12h; #以域名、URI、參數組合成Web緩存的Key值,Nginx根據Key值哈希,存儲緩存內容到二級緩存目錄內 proxy_cache_key $host$uri$is_args$args; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://backend_server; expires 1d; } }
Nginx反向代理配置參數釋義:
1.proxy_set_header(設定header)
2.proxy_hide_header(隱藏header)
3.proxy_pass_header(通過header)
4.proxy_connect_timeout(代理連接超時)
5.proxy_send_timeout(代理發送超時)
6.proxy_read_timeout(代理接收超時)
7.proxy_temp_file_write_size(設定緩存文件夾大小)
8.proxy_buffer_size(代理緩沖大小)
9.proxy_buffers (代理緩沖)
10.proxy_busy_buffers_size(高負荷下緩沖大小)
11.proxy_ignore_client_abort(不允許代理端主動關閉連接)
下面就分步介紹基於Nginx反向代理的upstream對服務請求轉發與分配5種方式,實際生成環境綜合設置,為了便於說明問題分不同方式來說明,nginx反向代理實際生成環境的應用,請參考《如何設置nginx反向代理實現服務器瞬間故障轉移》文章開篇部分的proxy.conf配置。
nginx的upstream目前支持5種方式的分配
1、輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。
2、weight
指定輪詢幾率,weight和訪問比率成正比,用於后端服務器性能不均的情況。
3、ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。
upstream bakend {
ip_hash;
server 192.168.203.14:88;
server 192.168.203.15:80;
}
4、fair(第三方)
按后端服務器的響應時間來分配請求,響應時間短的優先分配。
upstream backend {
server 192.168.203.14:88;
server 192.168.203.15:80;
fair;
}
5、url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。
例:在upstream中加入hash語句,server語句中不能寫入weight等其他的參數,hash_method是使用的hash算法
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
upstream bakend{
#定義負載均衡設備的Ip及設備狀態
ip_hash;
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在需要使用負載均衡的server中增加:
proxy_pass http://bakend/;
每個設備的狀態設置為:
1.down 表示單前的server暫時不參與負載
2.weight 默認為1.weight越大,負載的權重就越大。
3.max_fails :允許請求失敗的次數默認為1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
4.fail_timeout:max_fails次失敗后,暫停的時間。
5.backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這台機器壓力會最輕。
nginx支持同時設置多組的負載均衡,用來給不用的server來使用。
client_body_in_file_only 設置為On 可以講client post過來的數據記錄到文件中用來做debug
client_body_temp_path 設置記錄文件的目錄 可以設置最多3層目錄
location 對URL進行匹配.可以進行重定向或者進行新的代理 負載均衡