溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

ATS通過(guò)header頭重寫(xiě)解決HIT/502故障

發(fā)布時(shí)間:2020-06-30 17:17:41 來(lái)源:網(wǎng)絡(luò) 閱讀:1568 作者:愚人乙 欄目:網(wǎng)絡(luò)安全

    某局點(diǎn)的ats經(jīng)常出現(xiàn)HIT/502的故障,客戶(hù)一旦發(fā)飆,這是個(gè)扯不清的問(wèn)題,如果是MISS/502那可以說(shuō)是源站錯(cuò)誤,但HIT/502就與ats業(yè)務(wù)系統(tǒng)有關(guān)系了。
    經(jīng)過(guò)手動(dòng)測(cè)試,同一個(gè)url直接回源連續(xù)訪問(wèn),偶爾就有502,問(wèn)題很明顯了,源站是不穩(wěn)定的。分析后發(fā)現(xiàn)源站使用某廠家的CDN做的分發(fā),造成了源站不穩(wěn)定,我們拿到的是CDN的內(nèi)容,而且返回的502信息中還有明確的max-age,ats按照max-age的信息把故障信息存下來(lái)了,真是害死人的節(jié)奏。
    ats對(duì)于故障信息是有配置參數(shù)的,我們已經(jīng)對(duì)沒(méi)有max-age頭的故障信息設(shè)置為不緩存,有max-age頭故障信息是要看情況緩存的,因?yàn)橛锌赡芘龅皆凑靖陌娴葐?wèn)題,也就是說(shuō)有些故障信息是有必要緩存的。
    經(jīng)過(guò)研究,發(fā)現(xiàn)header頭重寫(xiě)可以解決這個(gè)故障,思路就是劫持399到599狀態(tài)碼的響應(yīng)header頭,強(qiáng)行將cache-control標(biāo)記刪除,同時(shí)加上
Cache-Control no-cache,那樣的話(huà)故障信息就不會(huì)存儲(chǔ)了,我們就在線上測(cè)試,又發(fā)現(xiàn)配置后只對(duì)新的請(qǐng)求生效,對(duì)老的信息是不起作用的,一查緩存,5.7T的存儲(chǔ)已經(jīng)寫(xiě)滿(mǎn),不敢輕易操作了,后想辦法配置緩存規(guī)則,采用保守的方式將5.7T的信息通過(guò)7天的刷新,502/HIT徹底解決,把header頭的操作分享出來(lái),供大家一起研究。

      header_rewrite.so是ats編譯時(shí)自帶的模塊,只是默認(rèn)沒(méi)有打開(kāi),所以需要在ats里注冊(cè)添加,然后編寫(xiě)規(guī)則,header模塊注冊(cè)方法是:
在plugin.config
 中加入  header_rewrite.so header.config,指定了header的配置文件是header.config
     然后就是在header.config中添加規(guī)則,添加如下(測(cè)試的時(shí)候又發(fā)現(xiàn)帶max-age的故障信息是不好偽造的,沒(méi)折又想了對(duì)正常信息進(jìn)行測(cè)試來(lái)看功能是否可行,走了一些彎路):

cond %{STATUS} >399 [AND]
cond %{STATUS} <599
rm-header Cache-Control

add-header Cache-Control no-cache 
     添加好后重新加載配置文件traffic_line -x
     對(duì)于刷新資源,ats默認(rèn)帶了對(duì)單條url強(qiáng)制刷新的規(guī)則,不過(guò)不適合我們當(dāng)前的場(chǎng)景,于是利用cache.config編寫(xiě)緩存規(guī)則,讓資源的保鮮期設(shè)置為5分鐘刷新一次,ims緩存規(guī)則的設(shè)置就不多介紹了,之前有寫(xiě)。 

自建個(gè)人原創(chuàng)站運(yùn)維網(wǎng)咖社(www.net-add.com),新的博文會(huì)在網(wǎng)咖社更新,歡迎瀏覽。

向AI問(wèn)一下細(xì)節(jié)
AI