Nginx Sticky的使用及踩過(guò)的坑(nginx-sticky-module)

什么是Sticky盗飒?# 為了理解Sticky的工作原理嚷量,我們可以先考慮一個(gè)問(wèn)題:負(fù)載均衡怎么做?

DNS解析逆趣,在域名解析時(shí)分配給不同的服務(wù)器IP蝶溶;

IP Hash,根據(jù)客戶端的IP,將請(qǐng)求分配到不同的服務(wù)器上抖所;

cookie梨州,服務(wù)器給客戶端下發(fā)一個(gè)cookie,具有特定cookie的請(qǐng)求會(huì)分配給它的發(fā)行者田轧。

Sticky就是基于cookie的一種負(fù)載均衡解決方案暴匠,通過(guò)cookie實(shí)現(xiàn)客戶端與后端服務(wù)器的會(huì)話保持, 在一定條件下可以保證同一個(gè)客戶端訪問(wèn)的都是同一個(gè)后端服務(wù)器。請(qǐng)求來(lái)了傻粘,服務(wù)器發(fā)個(gè)cookie每窖,并說(shuō):下次來(lái)帶上,直接來(lái)找我弦悉。

為方便敘述窒典,文中的cookie都指sticky使用的cookie。

Sticky工作原理 Sticky是nginx的一個(gè)模塊,通過(guò)分發(fā)和識(shí)別cookie稽莉,來(lái)使同一個(gè)客戶端的請(qǐng)求落在同一臺(tái)服務(wù)器上瀑志。sticky的處理過(guò)程如下(假設(shè)cookie名稱為route):

1.客戶端首次發(fā)起請(qǐng)求,請(qǐng)求頭未帶route的cookie污秆。nginx接收請(qǐng)求劈猪,發(fā)現(xiàn)請(qǐng)求頭沒(méi)有route,則以輪詢方式將請(qǐng)求分配給后端服務(wù)器良拼。

2.后端服務(wù)器處理完請(qǐng)求岸霹,將響應(yīng)頭和內(nèi)容返回給nginx。

3.nginx生成route的cookie将饺,返回給客戶端贡避。route的值與后端服務(wù)器對(duì)應(yīng),可能是明文予弧,也可能是md5刮吧、sha1等Hash值。

4.客戶端接收請(qǐng)求掖蛤,并創(chuàng)建route的cookie杀捻。

5.客戶端再次發(fā)送請(qǐng)求時(shí),帶上route蚓庭。

6.nginx接收到route致讥,直接轉(zhuǎn)給對(duì)應(yīng)的后端服務(wù)器。

關(guān)于sticky的詳細(xì)的配置過(guò)程在 這里器赞。

參數(shù)解析

這里引用淘寶Tengine的文檔:

語(yǔ)法:session_sticky [cookie=name] [domain=your_domain] [path=your_path] [maxage=time] [mode=insert|rewrite|prefix] [option=indirect] [maxidle=time] [maxlife=time] [fallback=on|off] [hash=plain|md5]

默認(rèn)值:session_sticky cookie=route mode=insert fallback=on

上下文:upstream

說(shuō)明:

本指令可以打開(kāi)會(huì)話保持的功能垢袱,下面是具體的參數(shù):

cookie設(shè)置用來(lái)記錄會(huì)話的cookie名稱

domain設(shè)置cookie作用的域名,默認(rèn)不設(shè)置

path設(shè)置cookie作用的URL路徑港柜,默認(rèn)不設(shè)置

maxage設(shè)置cookie的生存期请契,默認(rèn)不設(shè)置咳榜,即為session cookie,瀏覽器關(guān)閉即失效

mode設(shè)置cookie的模式:

insert: 在回復(fù)中本模塊通過(guò)Set-Cookie頭直接插入相應(yīng)名稱的cookie爽锥。
prefix: 不會(huì)生成新的cookie涌韩,但會(huì)在響應(yīng)的cookie值前面加上特定的前綴,當(dāng)瀏覽器帶著這個(gè)有特定標(biāo)識(shí)的cookie再次請(qǐng)求時(shí)氯夷,模塊在傳給后端服務(wù)前先刪除加入的前綴臣樱,后端服務(wù)拿到的還是原來(lái)的cookie值,這些動(dòng)作對(duì)后端透明腮考。如:”Cookie: NAME=SRV~VALUE”擎淤。

rewrite: 使用服務(wù)端標(biāo)識(shí)覆蓋后端設(shè)置的用于session sticky的cookie。如果后端服務(wù)在響應(yīng)頭中沒(méi)有設(shè)置該cookie秸仙,則認(rèn)為該請(qǐng)求不需要進(jìn)行session sticky,使用這種模式桩盲,后端服務(wù)可以控制哪些請(qǐng)求需要sesstion sticky寂纪,哪些請(qǐng)求不需要。

option 設(shè)置用于session sticky的cookie的選項(xiàng)赌结,可設(shè)置成indirect或direct捞蛋。indirect不會(huì)將session sticky的cookie傳送給后端服務(wù),該cookie對(duì)后端應(yīng)用完全透明柬姚。direct則與indirect相反拟杉。

maxidle設(shè)置session cookie的最長(zhǎng)空閑的超時(shí)時(shí)間

maxlife設(shè)置session cookie的最長(zhǎng)生存期

fallback設(shè)置是否重試其他機(jī)器,當(dāng)sticky的后端機(jī)器掛了以后量承,是否需要嘗試其他機(jī)器

hash 設(shè)置cookie中server標(biāo)識(shí)是用明文還是使用md5值搬设,默認(rèn)使用md5

maxage是cookie的生存期。不設(shè)置時(shí)撕捍,瀏覽器或App關(guān)閉后就失效拿穴。下次啟動(dòng)時(shí),又會(huì)隨機(jī)分配后端服務(wù)器忧风。所以如果希望該客戶端的請(qǐng)求長(zhǎng)期落在同一臺(tái)后端服務(wù)器上默色,可以設(shè)置maxage。

hash不論是明文還是hash值狮腿,都有固定的數(shù)目腿宰。因?yàn)閔ash是server的標(biāo)識(shí),所以有多少個(gè)server缘厢,就有等同數(shù)量的hash值吃度。

一些例外

同一客戶端的請(qǐng)求,有可能落在不同的后端服務(wù)器上## 如果客戶端啟動(dòng)時(shí)同時(shí)發(fā)起多個(gè)請(qǐng)求贴硫。由于這些請(qǐng)求都沒(méi)帶cookie规肴,所以服務(wù)器會(huì)隨機(jī)選擇后端服務(wù)器,返回不同的cookie。當(dāng)這些請(qǐng)求中的最后一個(gè)請(qǐng)求返回時(shí)拖刃,客戶端的cookie才會(huì)穩(wěn)定下來(lái)删壮,值以最后返回的cookie為準(zhǔn)。

cookie不一定生效## 由于cookie最初由服務(wù)器端下發(fā)兑牡,如果客戶端禁用cookie央碟,則cookie不會(huì)生效。

客戶端可能不帶cookie Android客戶端發(fā)送請(qǐng)求時(shí)均函,一般不會(huì)帶上所有的cookie亿虽,需要明確指定哪些cookie會(huì)帶上。如果希望用sticky做負(fù)載均衡苞也,請(qǐng)對(duì)Android開(kāi)發(fā)說(shuō)加上cookie洛勉。

注意事項(xiàng) * cookie名稱不要和業(yè)務(wù)使用的cookie重名。Sticky默認(rèn)的cookie名稱是route如迟,可以改成任何值收毫。但切記,不可以與業(yè)務(wù)中使用的cookie重名殷勘。 * 客戶端發(fā)的第一個(gè)請(qǐng)求是不帶cookie的此再。服務(wù)器下發(fā)的cookie,在客戶端下一次請(qǐng)求時(shí)才能生效玲销。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末输拇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子贤斜,更是在濱河造成了極大的恐慌策吠,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘩绒,死亡現(xiàn)場(chǎng)離奇詭異奴曙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)草讶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門洽糟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人堕战,你說(shuō)我怎么就攤上這事坤溃。” “怎么了嘱丢?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵薪介,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我越驻,道長(zhǎng)汁政,這世上最難降的妖魔是什么道偷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮记劈,結(jié)果婚禮上勺鸦,老公的妹妹穿的比我還像新娘。我一直安慰自己目木,他們只是感情好换途,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著刽射,像睡著了一般军拟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上誓禁,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天懈息,我揣著相機(jī)與錄音,去河邊找鬼摹恰。 笑死辫继,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的戒祠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼速种,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼姜盈!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起配阵,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤馏颂,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后棋傍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體救拉,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年瘫拣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了亿絮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡麸拄,死狀恐怖派昧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拢切,我是刑警寧澤蒂萎,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站淮椰,受9級(jí)特大地震影響五慈,放射性物質(zhì)發(fā)生泄漏纳寂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一泻拦、第九天 我趴在偏房一處隱蔽的房頂上張望毙芜。 院中可真熱鬧,春花似錦聪轿、人聲如沸爷肝。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)灯抛。三九已至,卻和暖如春音瓷,著一層夾襖步出監(jiān)牢的瞬間对嚼,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工绳慎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纵竖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓杏愤,卻偏偏與公主長(zhǎng)得像靡砌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子珊楼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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