您好,登錄后才能下訂單哦!
某局點的ats經常出現HIT/502的故障,客戶一旦發飆,這是個扯不清的問題,如果是MISS/502那可以說是源站錯誤,但HIT/502就與ats業務系統有關系了。
經過手動測試,同一個url直接回源連續訪問,偶爾就有502,問題很明顯了,源站是不穩定的。分析后發現源站使用某廠家的CDN做的分發,造成了源站不穩定,我們拿到的是CDN的內容,而且返回的502信息中還有明確的max-age,ats按照max-age的信息把故障信息存下來了,真是害死人的節奏。
ats對于故障信息是有配置參數的,我們已經對沒有max-age頭的故障信息設置為不緩存,有max-age頭故障信息是要看情況緩存的,因為有可能碰到源站改版等問題,也就是說有些故障信息是有必要緩存的。
經過研究,發現header頭重寫可以解決這個故障,思路就是劫持399到599狀態碼的響應header頭,強行將cache-control標記刪除,同時加上Cache-Control no-cache,那樣的話故障信息就不會存儲了,我們就在線上測試,又發現配置后只對新的請求生效,對老的信息是不起作用的,一查緩存,5.7T的存儲已經寫滿,不敢輕易操作了,后想辦法配置緩存規則,采用保守的方式將5.7T的信息通過7天的刷新,502/HIT徹底解決,把header頭的操作分享出來,供大家一起研究。
header_rewrite.so是ats編譯時自帶的模塊,只是默認沒有打開,所以需要在ats里注冊添加,然后編寫規則,header模塊注冊方法是:
在plugin.config 中加入 header_rewrite.so header.config,指定了header的配置文件是header.config
然后就是在header.config中添加規則,添加如下(測試的時候又發現帶max-age的故障信息是不好偽造的,沒折又想了對正常信息進行測試來看功能是否可行,走了一些彎路):
cond %{STATUS} >399 [AND]
cond %{STATUS} <599
rm-header Cache-Control
add-header Cache-Control no-cache
添加好后重新加載配置文件traffic_line -x
對于刷新資源,ats默認帶了對單條url強制刷新的規則,不過不適合我們當前的場景,于是利用cache.config編寫緩存規則,讓資源的保鮮期設置為5分鐘刷新一次,ims緩存規則的設置就不多介紹了,之前有寫。
自建個人原創站運維網咖社(www.net-add.com),新的博文會在網咖社更新,歡迎瀏覽。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。