快取層
最後更新
本頁說明圖片經過的四層快取各自的快取鍵、存活時間與失效方式。
四層快取
| 層 | 快取鍵 | 存活時間 | 設定位置 |
|---|---|---|---|
| 瀏覽器 | 完整 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 清除 |
相關頁面
- 參數如何影響輸出:圖片參數
- 邊緣層設定:Nginx、Cloudflare Worker