Nginx的反向代理與負(fù)載均衡

Nginx的反向代理與負(fù)載均衡

什么是反向代理?

自己計(jì)算機(jī) A 想訪(fǎng)問(wèn)國(guó)外某個(gè)網(wǎng)站 B围段,很遺憾訪(fǎng)問(wèn)不了亏栈;此時(shí)台腥,有臺(tái)中間服務(wù)器 C 可以訪(fǎng)問(wèn)國(guó)外的網(wǎng)站B,那么绒北,我們可以用自己的計(jì)算機(jī) A 訪(fǎng)問(wèn) 服務(wù)器C黎侈, 通過(guò)C來(lái)訪(fǎng)問(wèn)B網(wǎng)站。那么這個(gè)時(shí)候闷游, 服務(wù)器C稱(chēng)為代理服務(wù)器峻汉,這種訪(fǎng)問(wèn)方式叫做正向代理。正向代理有一個(gè)特點(diǎn)脐往,就是我們明確知道要訪(fǎng)問(wèn)哪個(gè)網(wǎng)站休吠。
再如,當(dāng)我們有一個(gè)服務(wù)器集中业簿,并且服務(wù)器集群中的每臺(tái)服務(wù)器的內(nèi)容一樣的時(shí)候瘤礁,同樣我們要直接從個(gè)人電腦訪(fǎng)問(wèn)到服務(wù)器集中的服務(wù)器的時(shí)候無(wú)法訪(fǎng)問(wèn),且此時(shí)第三方服務(wù)器能訪(fǎng)問(wèn)集群辖源,這個(gè)時(shí)候,我們通過(guò)第三方服務(wù)器訪(fǎng)問(wèn)服務(wù)器集群的內(nèi)容希太,但是此時(shí)我們并不知道是哪一臺(tái)服務(wù)器提供的內(nèi)容克饶,此時(shí)的代理方式稱(chēng)為反向代理。

什么是負(fù)載均衡

Nginx 是一款可以通過(guò)反向代理實(shí)現(xiàn)負(fù)載均衡的服務(wù)器誊辉,使用Nginx服務(wù)器實(shí)現(xiàn)負(fù)載均衡的時(shí)候矾湃,用戶(hù)的訪(fǎng)問(wèn)首先會(huì)訪(fǎng)問(wèn)到Nginx服務(wù)器,然后Nginx服務(wù)器再?gòu)姆?wù)器集群表中選擇壓力較小的服務(wù)器堕澄,然后將該訪(fǎng)問(wèn)請(qǐng)求引向該服務(wù)器邀跃。
若服務(wù)器集群中的某個(gè)服務(wù)器崩潰霉咨,那么從待選服務(wù)器列表中將該服務(wù)器刪除,也就是說(shuō)一個(gè)服務(wù)器假如崩潰了拍屑,那么Nginx就肯定不會(huì)將訪(fǎng)問(wèn)請(qǐng)求引入該服務(wù)器了途戒。

負(fù)載均衡實(shí)現(xiàn)

1.jpg
ip_hash.jpg
weight.jpg

HTTP Upstram 模塊

Upstream模塊是Nginx服務(wù)器的一個(gè)重要模塊。 Upstream模塊實(shí)現(xiàn)在輪詢(xún)和客戶(hù)端ip之間實(shí)現(xiàn)后端的負(fù)載均衡僵驰。常用的指令有 ip_hash指令喷斋、server指令 和 upstream指令等。

  • ip_hash 沒(méi)有默認(rèn)值蒜茴。 基于客戶(hù)端的IP地址分發(fā)請(qǐng)求星爪。

    • 哈希的關(guān)鍵字是客戶(hù)端的C類(lèi)網(wǎng)絡(luò)地址,這個(gè)功能將保證這個(gè)客戶(hù)端請(qǐng)求總是被轉(zhuǎn)發(fā)到一臺(tái)服務(wù)器上粉私,但是如果這臺(tái)服務(wù)器不可用顽腾,那么請(qǐng)求將轉(zhuǎn)發(fā)到另外的服務(wù)器上,這將保證某個(gè)客戶(hù)端有很大概率總是連接到一臺(tái)服務(wù)器诺核。
    • 語(yǔ)法:"ip_hash;"
    • 無(wú)法將權(quán)重(weight)與ip_hash聯(lián)合使用來(lái)分發(fā)連接抄肖。如果有某臺(tái)服務(wù)器不可用,你必須標(biāo)記其為“down”猪瞬,如下例:
          upstream backend {
              ip_hash;
              server   backend1.example.com;
              server   backend2.example.com;
              server   backend3.example.com  down;
              server   backend4.example.com;
          }
      
  • server 指定后端服務(wù)器的名稱(chēng)和一些參數(shù)憎瘸,可以使用域名,IP陈瘦,端口幌甘,或者unix socket。如果指定為域名痊项,則首先將其解析為IP锅风。

    • 語(yǔ)法: server name [parameters]
    • weight = NUMBER - 設(shè)置服務(wù)器權(quán)重,默認(rèn)為1鞍泉。
    • max_fails = NUMBER- 在一定時(shí)間內(nèi)(這個(gè)時(shí)間在fail_timeout參數(shù)中設(shè)置)檢查這個(gè)服務(wù)器是否可用時(shí)產(chǎn)生的最多失敗請(qǐng)求數(shù)皱埠,默認(rèn)為1,將其設(shè)置為0可以關(guān)閉檢查咖驮,這些錯(cuò)誤在proxy_next_upstreamfastcgi_next_upstream(404錯(cuò)誤不會(huì)使max_fails增加)中定義边器。
    • fail_timeout = TIME - 在這個(gè)時(shí)間內(nèi)產(chǎn)生了max_fails所設(shè)置大小的失敗嘗試連接請(qǐng)求后這個(gè)服務(wù)器可能不可用,同樣它指定了服務(wù)器不可用的時(shí)間(在下一次嘗試連接請(qǐng)求發(fā)起之前)托修,默認(rèn)為10秒忘巧,fail_timeout與前端響應(yīng)時(shí)間沒(méi)有直接關(guān)系,不過(guò)可以使用proxy_connect_timeoutproxy_read_timeout來(lái)控制睦刃。
    • down - 標(biāo)記服務(wù)器處于離線(xiàn)狀態(tài)砚嘴,通常和ip_hash一起使用。
    • backup - (0.6.7或更高)如果所有的非備份服務(wù)器都宕機(jī)或繁忙,則使用本服務(wù)器(無(wú)法和ip_hash指令搭配使用)际长。
        upstream  backend  {
            server   backend1.example.com    weight=5;
            server   127.0.0.1:8080          max_fails=3  fail_timeout=30s;
            server   unix:/tmp/backend3;
        }
    

    注意:如果你只使用一臺(tái)上游服務(wù)器耸采,nginx將設(shè)置一個(gè)內(nèi)置變量為1,即max_fails和fail_timeout參數(shù)不會(huì)被處理工育。

    結(jié)果:如果nginx不能連接到上游虾宇,請(qǐng)求將丟失。

    解決:使用多臺(tái)上游服務(wù)器翅娶。

  • upstream 這個(gè)字段設(shè)置一群服務(wù)器文留,可以將這個(gè)字段放在proxy_passfastcgi_pass指令中作為一個(gè)單獨(dú)的實(shí)體,它們可以可以是監(jiān)聽(tīng)不同端口的服務(wù)器竭沫,并且也可以是同時(shí)監(jiān)聽(tīng)TCPUnix socket的服務(wù)器燥翅。服務(wù)器可以指定不同的權(quán)重,默認(rèn)為1蜕提。

    • 語(yǔ)法: upstream name { ... }
    • 使用如上 代碼片段
    • 請(qǐng)求將按照輪詢(xún)的方式分發(fā)到后端服務(wù)器森书,但同時(shí)也會(huì)考慮權(quán)重。
    • 在上面的例子中如果每次發(fā)生7個(gè)請(qǐng)求谎势,5個(gè)請(qǐng)求將被發(fā)送到backend1.example.com凛膏,其他兩臺(tái)將分別得到一個(gè)請(qǐng)求,如果有一臺(tái)服務(wù)器不可用脏榆,那么請(qǐng)求將被轉(zhuǎn)發(fā)到下一臺(tái)服務(wù)器猖毫,直到所有的服務(wù)器檢查都通過(guò)。如果所有的服務(wù)器都無(wú)法通過(guò)檢查须喂,那么將返回給客戶(hù)端最后一臺(tái)工作的服務(wù)器產(chǎn)生的結(jié)果吁断。

官方文檔

一些 Nginx 的命令

  • nginx -s reload 重新加載Nginx
  • nginx -s stop 關(guān)閉nginx
  • nginx -s start 開(kāi)啟nginx
  • service nginx start/stop/restart (這個(gè)一般我用的比較多)
  • nginx -t -c 文件地址 驗(yàn)證配置文件

總結(jié)

  • 使用硬件的方式實(shí)現(xiàn)負(fù)載均衡,那么中間的轉(zhuǎn)發(fā)機(jī)構(gòu)就是硬件坞生,這個(gè)時(shí)候運(yùn)行的效率非常高仔役,對(duì)應(yīng)的成本也非常高。
  • 如果采用軟件的方式來(lái)實(shí)現(xiàn)負(fù)載均衡是己,那么中間的轉(zhuǎn)發(fā)機(jī)構(gòu)就是軟件又兵,這個(gè)時(shí)候,運(yùn)行效率不如硬件卒废,但是成本相對(duì)來(lái)說(shuō)低得多沛厨。
  • Nginx服務(wù)器實(shí)現(xiàn)負(fù)載均衡,那么就是通過(guò)軟件的方式來(lái)實(shí)現(xiàn)負(fù)載均衡摔认,并且Nginx本身支持高并發(fā)等逆皮。顧而使用Nginx服務(wù)器實(shí)現(xiàn)負(fù)載均衡,能大大解決節(jié)約企業(yè)的成本级野,并且由于Nginx是服務(wù)器軟件页屠,且執(zhí)行效率也非常高
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蓖柔,隨后出現(xiàn)的幾起案子辰企,更是在濱河造成了極大的恐慌,老刑警劉巖况鸣,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牢贸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡镐捧,警方通過(guò)查閱死者的電腦和手機(jī)潜索,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)懂酱,“玉大人竹习,你說(shuō)我怎么就攤上這事×形” “怎么了整陌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)瞎领。 經(jīng)常有香客問(wèn)我泌辫,道長(zhǎng),這世上最難降的妖魔是什么九默? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任震放,我火速辦了婚禮,結(jié)果婚禮上驼修,老公的妹妹穿的比我還像新娘殿遂。我一直安慰自己,他們只是感情好邪锌,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布勉躺。 她就那樣靜靜地躺著,像睡著了一般觅丰。 火紅的嫁衣襯著肌膚如雪饵溅。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天妇萄,我揣著相機(jī)與錄音蜕企,去河邊找鬼。 笑死冠句,一個(gè)胖子當(dāng)著我的面吹牛轻掩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播懦底,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼唇牧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起丐重,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤腔召,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后扮惦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體臀蛛,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年崖蜜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浊仆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡豫领,死狀恐怖抡柿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情等恐,我是刑警寧澤沙绝,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站鼠锈,受9級(jí)特大地震影響闪檬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜购笆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一粗悯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧同欠,春花似錦样傍、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至襟锐,卻和暖如春撤逢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粮坞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工蚊荣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人莫杈。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓互例,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親筝闹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子媳叨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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