快取層

最後更新

本頁說明圖片經過的四層快取各自的快取鍵、存活時間與失效方式。

四層快取

層 快取鍵 存活時間 設定位置
瀏覽器 完整 URL 7 天(Cache-Control: public, max-age=604800) Nginx /c/img/ 區塊與 Cloudflare Worker;Express 本身不送此標頭
Cloudflare Worker 來源 URL+query string,另附 X-Custom-Cache-Key 標頭 7 天 worker/index.js
Nginx proxy_cache 預設鍵(含 query) 200/301/302/304 為 7 天,其他 1 分鐘;閒置 30 天淘汰;上限 2 GB config/nginx/nodejs.conf
本機快取檔 依參數組成的檔名(見下節) 無期限 GetFromPath.ts

本機快取檔命名

快取檔位於 storage/image/cache/,目錄結構對應 upload/。原檔去掉副檔名後依參數追加:

參數 檔名格式
有 s {name}_{s}_{q}.{t}
w 與 h {name}_{w}_{h}_{q}.{t}
只有 w {name}_{w}_auto_{q}.{t}
只有 h {name}_auto_{h}_{q}.{t}
皆無 {name}_auto_auto_{q}.{t}

?w=800 產生 {name}_800_auto_.webp(未指定品質時為空字串)。{t} 為正規化後的格式(jpeg → jpg,不合法值 → webp)。

查找順序

graph TB
    A[請求 /c/img/...] --> B{.pdf / .svg?}
    B -->|是| C[串流原檔,不快取]
    B -->|否| D{o = 1?}
    D -->|是| E[串流原檔,不快取]
    D -->|否| F{快取檔存在?}
    F -->|是| G[回傳快取檔]
    F -->|否| H[sharp 轉檔 → 回傳 → 寫入快取檔]

失效與清除

情境 結果
原檔被同名覆寫 不會發生:上傳檔名為隨機字串+時間戳記
需要清除本機快取 手動刪除 storage/image/cache/ 對應目錄
需要清除 Nginx 快取 刪除容器內 /var/cache/nginx/images 後重新載入 Nginx
需要清除 Cloudflare 快取 於 Cloudflare Dashboard 清除

相關頁面

EN