解決Nginx多節(jié)點(diǎn)上相同靜態(tài)文件的etag不同的問(wèn)題

最近用nginx來(lái)提供一些靜態(tài)文件作為配置。nginx從1.3.3版起就支持etag了迈勋,默認(rèn)就可以生效勉耀,配置文件更改后可以通過(guò)etag的變化來(lái)讓瀏覽器拉取新的配置,還是挺方便的粗蔚。但是在測(cè)試環(huán)境部署后尝偎,卻發(fā)現(xiàn)了問(wèn)題:測(cè)試環(huán)境的nginx有兩個(gè)節(jié)點(diǎn),前面再放個(gè)負(fù)載均衡器鹏控,輪詢?cè)L問(wèn)到不同的服務(wù)器上致扯,此時(shí)發(fā)現(xiàn)請(qǐng)求相同的靜態(tài)文件時(shí),返回的etag卻不同当辐,瀏覽器每次請(qǐng)求都會(huì)返回個(gè)200抖僵,而不是304,沒(méi)有緩存的效果了缘揪。

到網(wǎng)上查了下nginx etag的算法耍群,才發(fā)現(xiàn),nginx是通過(guò)文件的大小和文件的修改時(shí)間來(lái)計(jì)算etag的找筝,nginx的源碼中ngx_http_set_etag函數(shù)中有這樣的代碼:

etag->value.len = ngx_sprintf(etag->value.data, "\"%xT-%xO\"",
                                  r->headers_out.last_modified_time,
                                  r->headers_out.content_length_n)
                      - etag->value.data;

    r->headers_out.etag = etag;

完整的源碼可參考:https://github.com/nginx/nginx/blob/1f01183b9e6658749934313fd72f7f16c1918b54/src/http/ngx_http_core_module.c#L1673

這樣看來(lái)蹈垢,兩個(gè)nginx返回的etag不同,可能就是因?yàn)閮蛇呂募男薷臅r(shí)間不同呻征。

變更文件的修改時(shí)間還是挺容易的耘婚,可以直接用touch命令。在touch命令的man文檔中描述了-t參數(shù)的用法:

-t STAMP
use [[CC]YY]MMDDhhmm[.ss] instead of current time

那么在兩個(gè)節(jié)點(diǎn)上都用以下的命令就可以將文件的修改時(shí)間都設(shè)置為2022年2月25日13:13分了:

touch -t 202202251313 myconf.json

如果要用python寫(xiě)代碼的話陆赋,可以用os.utime來(lái)設(shè)置文件的修改時(shí)間:

import os
os.utime('myconf.json', (1645806368, 1645806368))

此時(shí)再進(jìn)行下測(cè)試沐祷,兩個(gè)節(jié)點(diǎn)上nginx返回的etag就一致了,第二次請(qǐng)求的時(shí)候就可以看到響應(yīng)是304而不是200了攒岛。

原文:https://knktc.com/2022/02/26/nginx-etag-different-in-2-nodes/

參考文檔:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赖临,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子灾锯,更是在濱河造成了極大的恐慌兢榨,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件顺饮,死亡現(xiàn)場(chǎng)離奇詭異吵聪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)兼雄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)吟逝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了犬金?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵囱井,是天一觀的道長(zhǎng)驹尼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)庞呕,這世上最難降的妖魔是什么新翎? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮千扶,結(jié)果婚禮上料祠,老公的妹妹穿的比我還像新娘。我一直安慰自己澎羞,他們只是感情好髓绽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著妆绞,像睡著了一般顺呕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上括饶,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天株茶,我揣著相機(jī)與錄音,去河邊找鬼图焰。 笑死启盛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的技羔。 我是一名探鬼主播僵闯,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼藤滥!你這毒婦竟也來(lái)了鳖粟?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拙绊,失蹤者是張志新(化名)和其女友劉穎向图,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體标沪,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡榄攀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了金句。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片檩赢。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖趴梢,靈堂內(nèi)的尸體忽然破棺而出漠畜,到底是詐尸還是另有隱情,我是刑警寧澤坞靶,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布憔狞,位于F島的核電站,受9級(jí)特大地震影響彰阴,放射性物質(zhì)發(fā)生泄漏瘾敢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一尿这、第九天 我趴在偏房一處隱蔽的房頂上張望簇抵。 院中可真熱鬧,春花似錦射众、人聲如沸碟摆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)典蜕。三九已至,卻和暖如春罗洗,著一層夾襖步出監(jiān)牢的瞬間愉舔,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工伙菜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留轩缤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓贩绕,卻偏偏與公主長(zhǎng)得像火的,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丧叽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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