Nginx負(fù)載均衡與轉(zhuǎn)發(fā)

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 ;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市煌妈,隨后出現(xiàn)的幾起案子儡羔,更是在濱河造成了極大的恐慌,老刑警劉巖璧诵,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汰蜘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡之宿,警方通過查閱死者的電腦和手機(jī)族操,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來比被,“玉大人色难,你說我怎么就攤上這事〉茸海” “怎么了枷莉?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尺迂。 經(jīng)常有香客問我笤妙,道長,這世上最難降的妖魔是什么枪狂? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任危喉,我火速辦了婚禮,結(jié)果婚禮上州疾,老公的妹妹穿的比我還像新娘辜限。我一直安慰自己,他們只是感情好严蓖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布薄嫡。 她就那樣靜靜地躺著,像睡著了一般颗胡。 火紅的嫁衣襯著肌膚如雪毫深。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天毒姨,我揣著相機(jī)與錄音哑蔫,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛闸迷,可吹牛的內(nèi)容都是我干的嵌纲。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼腥沽,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼逮走!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起今阳,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤师溅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后盾舌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體墓臭,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年矿筝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了起便。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棚贾。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窖维,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出妙痹,到底是詐尸還是另有隱情铸史,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布怯伊,位于F島的核電站琳轿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏耿芹。R本人自食惡果不足惜崭篡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吧秕。 院中可真熱鬧琉闪,春花似錦、人聲如沸砸彬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砂碉。三九已至蛀蜜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間增蹭,已是汗流浹背滴某。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人霎奢。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓偏瓤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親椰憋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子厅克,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一、概要 負(fù)載均衡的主要作用是為了避免單獨(dú)一個(gè)服務(wù)器壓力過大橙依,將來自用戶的請(qǐng)求轉(zhuǎn)發(fā)給不同的服務(wù)器負(fù)載均衡通過ups...
    任未然閱讀 507評(píng)論 0 0
  • Nginx (engine x)是一個(gè)高性能的HTTP和反向代理服務(wù)器证舟,也是一個(gè)IMAP/POP3/SMTP服務(wù)器...
    hhf_Engineer閱讀 2,134評(píng)論 0 1
  • Nginx簡(jiǎn)介 解決基于進(jìn)程模型產(chǎn)生的C10K問題,請(qǐng)求時(shí)即使無狀態(tài)連接如web服務(wù)都無法達(dá)到并發(fā)響應(yīng)量級(jí)一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 1,993評(píng)論 0 9
  • nginx做負(fù)載均衡器以及proxy緩存配置 關(guān)于nginx的安裝和基本配置請(qǐng)參考nginx,本文在原基礎(chǔ)上完成以...
    meng_philip123閱讀 1,587評(píng)論 1 16
  • 哪怕什么也不做窗骑,只是聽曲女责,發(fā)呆。 她像那些冬眠的動(dòng)物创译,等待春天的到來抵知。 平凡的生活中,更多的是等待软族。等待明天的到來...
    云天雨風(fēng)閱讀 342評(píng)論 2 3