Nginx代理自動上線下線


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進行匹配.可以進行重定向或者進行新的代理 負載均衡


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM