把商品目錄變成 502 的瀏覽次數計數器

運送

我們銷售所有套件的頁面,在產品上線後約 41 小時內,對每位訪客都回傳 502 Bad Gateway。每個套件自己的頁面正常運作,首頁正常運作,結帳流程也正常運作。出問題的是幾行計算頁面瀏覽次數的程式碼。

錯誤所在

我們商店的伺服器會計算套件頁面的造訪次數。為了找出請求對應的是哪個套件,它會取出路徑的第二個部分:

self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")

對於 /kits/studio/,結果是 studio。但對於商品目錄本身 /kits/,路徑有兩個斜線,所以防護機制讓它通過,然而移除斜線後只剩一個部分,導致 [1] 引發 IndexError。處理程序使用的是 Python 標準的 http.server:do_GET 中的異常會直接關閉連線而不回應,Cloudflare 便向訪客顯示 502。

修正方式是一個小函式,當該部分缺失時回傳空字串。瀏覽次數計數只需要套件名稱;它從不應該有能力讓它正在計數的頁面崩潰。

為什麼我們的檢查都沒發現

改變了什麼

重點整理

在請求處理程序中執行的旁支工作,例如計數、記錄或追蹤,絕不能導致請求失敗;而僅涵蓋你剛修改之頁面的頁面檢查,會漏掉連結到這些頁面的其他頁面。Night Watch 中的守護程序可接受任何頁面清單,每個頁面都指定必須包含的文字,而不僅限於首頁。

已更新: