1醉顽、6種負(fù)載均衡策略
1、輪詢 :默認(rèn)方式
2平挑、weight : 權(quán)重方式
3游添、ip_hash :依據(jù)ip分配方式
4、least_conn :最少連接方式
5通熄、fair(第三方) :響應(yīng)時(shí)間方式
6唆涝、url_hash(第三方) :依據(jù)URL分配方式
參數(shù):
1、fail_timeout :與max_fails結(jié)合使用唇辨。
2廊酣、max_fails? : 設(shè)置在fail_timeout參數(shù)設(shè)置的時(shí)間內(nèi)最大失敗次數(shù),如果在這個(gè)時(shí)間內(nèi)助泽,所有針對(duì)該服務(wù)器的請(qǐng)求都失敗了啰扛,那么認(rèn)為該服務(wù)器會(huì)被認(rèn)為是停機(jī)了。
3嗡贺、fail_time? : 服務(wù)器會(huì)被認(rèn)為停機(jī)的時(shí)間長度,默認(rèn)為10s隐解。
4、backup? : 標(biāo)記該服務(wù)器為備用服務(wù)器诫睬。當(dāng)主服務(wù)器停止時(shí)煞茫,請(qǐng)求會(huì)被發(fā)送到它這里。
5摄凡、down? : 標(biāo)記服務(wù)器永久停機(jī)了续徽。
2、nginx負(fù)載均衡配置
1亲澡、輪詢
不需要特殊配置钦扭,缺省配置就是輪詢策略。
注意:
在輪詢中床绪,如果服務(wù)器down掉了客情,會(huì)自動(dòng)剔除該服務(wù)器钞啸。
缺省配置就是輪詢策略议惰。
此策略適合服務(wù)器配置相當(dāng)坦冠,無狀態(tài)且短平快的服務(wù)使用太抓。
2暇昂、權(quán)重
權(quán)重方式簿训,在輪詢策略的基礎(chǔ)上指定輪詢的幾率统阿。
例:
upstream dynamic_test {
? ? server localhost:8080? weight=2;? #tomcat 7.0
? ? server localhost:8081;? #tomcat 8.0
? ? server localhost:8082? backup;? #tomcat 8.5
? ? server localhost:8083? max_fails=3 fail_timeout=20s;? #tomcat 9.0
}
在該例子中玷氏,weight參數(shù)用于指定輪詢幾率绩社,weight的默認(rèn)值為1,摔蓝;weight的數(shù)值與訪問比率成正比,比如Tomcat 7.0被訪問的幾率為其他服務(wù)器的兩倍愉耙。
注意:
權(quán)重越高分配到需要處理的請(qǐng)求越多项鬼。
此策略可以與least_conn和ip_hash結(jié)合使用。
此策略比較適合服務(wù)器的硬件配置差別比較大的情況劲阎。
3绘盟、ip_hash
指定負(fù)載均衡器按照基于客戶端IP的分配方式,這個(gè)方法確保了相同的客戶端的請(qǐng)求一直發(fā)送到相同的服務(wù)器悯仙,以保證session會(huì)話龄毡。這樣每個(gè)訪客都固定訪問一個(gè)后端服務(wù)器,可以解決session不能跨服務(wù)器的問題锡垄。
復(fù)制代碼
upstream dynamic_test {
? ? ip_hash;? ? #保證每個(gè)訪客固定訪問一個(gè)后端服務(wù)器
? ? server localhost:8080? weight=2;? #tomcat 7.0
? ? server localhost:8081;? #tomcat 8.0
? ? server localhost:8082;? #tomcat 8.5
? ? server localhost:8083? max_fails=3 fail_timeout=20s;? #tomcat 9.0
}
復(fù)制代碼
注意:
在nginx版本1.3.1之前沦零,不能在ip_hash中使用權(quán)重(weight)。
ip_hash不能與backup同時(shí)使用货岭。
此策略適合有狀態(tài)服務(wù)路操,比如session疾渴。
當(dāng)有服務(wù)器需要剔除,必須手動(dòng)down掉屯仗。
4搞坝、least_conn
把請(qǐng)求轉(zhuǎn)發(fā)給連接數(shù)較少的后端服務(wù)器。輪詢算法是把請(qǐng)求平均的轉(zhuǎn)發(fā)給各個(gè)后端魁袜,使它們的負(fù)載大致相同桩撮;但是,有些請(qǐng)求占用的時(shí)間很長峰弹,會(huì)導(dǎo)致其所在的后端負(fù)載較高店量。這種情況下,least_conn這種方式就可以達(dá)到更好的負(fù)載均衡效果鞠呈。
復(fù)制代碼
upstream dynamic_test {
? ? least_conn;? ? #把請(qǐng)求轉(zhuǎn)發(fā)給連接數(shù)較少的后端服務(wù)器
? ? server localhost:8080? weight=2;? #tomcat 7.0
? ? server localhost:8081;? #tomcat 8.0
? ? server localhost:8082 backup;? #tomcat 8.5
? ? server localhost:8083? max_fails=3 fail_timeout=20s;? #tomcat 9.0
}
復(fù)制代碼
注意:
此負(fù)載均衡策略適合請(qǐng)求處理時(shí)間長短不一造成服務(wù)器過載的情況融师。
5、fair(第三方策略)
第三方的負(fù)載均衡策略的實(shí)現(xiàn)需要安裝第三方插件蚁吝。
1诬滩、下載:https://github.com/gnosek/nginx-upstream-fair
2、解壓
3灭将、安裝
./configure --user=nginx --group=nginx --prefix=/zjl/program/nginx-1.14.2 --with-http_stub_status_module --with-http_ssl_module --add-module=/zjl/software/nginx-upstream-fair/
make
make install
注意:紅色加粗部分為解壓后新加入的fair? 模塊路徑
4疼鸟、配置
按照服務(wù)器端的響應(yīng)時(shí)間來分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配庙曙。
復(fù)制代碼
upstream dynamic_test {
? ? fair;? ? #實(shí)現(xiàn)響應(yīng)時(shí)間短的優(yōu)先分配
? ? server localhost:8080;? #tomcat 7.0
? ? server localhost:8081;? #tomcat 8.0
? ? server localhost:8082;? #tomcat 8.5
? ? server localhost:8083;? #tomcat 9.0
}
復(fù)制代碼
6空镜、url_hash(第三方策略)
第三方的負(fù)載均衡策略的實(shí)現(xiàn)需要安裝第三方插件。
需要下載:Nginx_upstream_hash 插件
安裝方式如 5 : 添加 -–add-module=/? ? 參數(shù)
配置:
按訪問url的hash結(jié)果來分配請(qǐng)求捌朴,使每個(gè)url定向到同一個(gè)后端服務(wù)器吴攒,要配合緩存命中來使用。同一個(gè)資源多次請(qǐng)求砂蔽,可能會(huì)到達(dá)不同的服務(wù)器上洼怔,導(dǎo)致不必要的多次下載,緩存命中率不高左驾,以及一些資源時(shí)間的浪費(fèi)镣隶。而使用url_hash,可以使得同一個(gè)url(也就是同一個(gè)資源請(qǐng)求)會(huì)到達(dá)同一臺(tái)服務(wù)器诡右,一旦緩存住了資源安岂,再此收到請(qǐng)求,就可以從緩存中讀取帆吻。
復(fù)制代碼
upstream dynamic_test {
? ? hash $request_uri;? ? #實(shí)現(xiàn)每個(gè)url定向到同一個(gè)后端服務(wù)器
? ? server localhost:8080;? #tomcat 7.0
? ? server localhost:8081;? #tomcat 8.0
? ? server localhost:8082;? #tomcat 8.5
? ? server localhost:8083;? #tomcat 9.0
}
復(fù)制代碼
3域那、根據(jù)URL、客戶端類型猜煮、文件擴(kuò)展名進(jìn)行轉(zhuǎn)發(fā)
1次员、根據(jù)url 轉(zhuǎn)發(fā)
配置文件:
http里配置:
upstream n2{
? ? server 192.168.244.130:80;
}
upstream n3{
? ? server 192.168.244.131:80;
}
server里配置:
location /n2/ {
? ? proxy_pass? http://n2;
}
location /n3/ {
? ? proxy_pass? http://n3;
}
第二種server 里配置方式:
復(fù)制代碼
location / {
? ? if ( $request_uri ~* "^/n2/(.*)" ) {
? ? ? ? proxy_pass? http://n2/$1;
? ? }
? ? if ( $request_uri ~* "^/n3/(.*)" ) {
? ? ? ? proxy_pass? http://n3/$1;
? ? }
}
復(fù)制代碼
if 和 左小括號(hào)之間有空格败许,且右小括號(hào)和左大括號(hào)之間有空格
訪問
http://192.168.244.128/n2/zjl.html? ---> 130里的zjl.html頁面
http://192.168.244.128/n3/zjl.html? ---> 131里的zjl.html頁面
2、根據(jù)客戶端設(shè)備($http_user_agent)
配置文件:
復(fù)制代碼
location? /? {
? ? if($http_user_agent? ~*? "MSIE"){
? ? ? ? proxy_pass? http://n2;
? ? }
? ? if($http_user_agent? ~*? "Chrome"){
? ? ? ? proxy_pass? http://n3;
? ? }
? ? proxy_pass? http://n1;
? ? include? proxy.conf;
}
復(fù)制代碼
如果是ie訪問n2服務(wù)池淑蔚,如果是谷歌瀏覽器訪問n3服務(wù)池市殷,如果是其他訪問默認(rèn)服務(wù)池
復(fù)制代碼
location? /? {
? ? if($http_user_agent? ~*? "android"){
? ? ? ? proxy_pass? http://n2;
? ? }
? ? if($http_user_agent? ~*? "ipone"){
? ? ? ? proxy_pass? http://n3;
? ? }
? ? proxy_pass? http://pc_pools;
? ? include? proxy.conf;
}
復(fù)制代碼
如果是android、ipone束倍、ipad等設(shè)備 則分別訪問不同服務(wù)池
3被丧、根據(jù)文件后綴轉(zhuǎn)發(fā)
配置文件:
復(fù)制代碼
location? ~? .*.(gif|jpg|png)${
? ? proxy_pass? http://static_pools;
? ? include? proxy.conf;
}
#或location內(nèi)加入如下內(nèi)容:
if($request_uri? ~*? ? ".*\.(php|php5)$"){
? ? proxy_pass? http://php_server_pools;
}
if($request_uri? ~*? ? ".*\.(jsp|do|do*)$"){
? ? proxy_pass? http://java_server_pools;
}
復(fù)制代碼
4盟戏、正則說明:
轉(zhuǎn)載自:https://www.cnblogs.com/netsa/p/6383094.html
1绪妹、^: 匹配字符串的開始位置;
2柿究、 $:匹配字符串的結(jié)束位置邮旷;
3、.*:? .匹配任意字符蝇摸,*匹配數(shù)量0到正無窮婶肩;
4、\. 斜杠用來轉(zhuǎn)義貌夕,\.匹配 .? ? 特殊使用方法律歼,記住記性了;
5啡专、(值1|值2|值3|值4):或匹配模式险毁,例:(jpg|gif|png|bmp)匹配jpg或gif或png或bmp
6、i不區(qū)分大小寫
一.正則表達(dá)式匹配们童,其中:
~ 為區(qū)分大小寫匹配
~* 為不區(qū)分大小寫匹配
!~和!~*分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配
二.文件及目錄匹配畔况,其中
-f和!-f用來判斷是否存在文件
-d和!-d用來判斷是否存在目錄
-e和!-e用來判斷是否存在文件或目錄
-x和!-x用來判斷文件是否可執(zhí)行
三.rewrite指令的最后一項(xiàng)參數(shù)為flag標(biāo)記,flag標(biāo)記有:
1.last? ? 相當(dāng)于apache里面的[L]標(biāo)記慧库,表示rewrite跷跪。
2.break本條規(guī)則匹配完成后,終止匹配齐板,不再匹配后面的規(guī)則吵瞻。
3.redirect? 返回302臨時(shí)重定向,瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的URL地址甘磨。
4.permanent? 返回301永久重定向听皿,瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的URL地址。
使用last和break實(shí)現(xiàn)URI重寫宽档,瀏覽器地址欄不變尉姨。而且兩者有細(xì)微差別,使用alias指令必須用last標(biāo)記;使用proxy_pass指令時(shí)吗冤,需要使用break標(biāo)記又厉。Last標(biāo)記在本條rewrite規(guī)則執(zhí)行完畢后九府,會(huì)對(duì)其所在server{......}標(biāo)簽重新發(fā)起請(qǐng)求,而break標(biāo)記則在本條規(guī)則匹配完成后覆致,終止匹配侄旬。
例如:如果我們將類似URL/photo/123456 重定向到/path/to/photo/12/1234/123456.png
rewrite "/photo/([0-9]{2})([0-9]{2})([0-9]{2})"/path/to/photo/$1/$1$2/$1$2$3.png ;