1.
評估現況與目標
- 收集指標:用 Google Analytics、CloudWatch、Prometheus 蒐集每站點的流量、請求分佈(地理)、熱門 URL、靜態/動態比例。
- 目標設定:將 P95 延遲降至 <200ms(台灣訪客)並把帶寬來源的 60%-90% 轉移到 CDN 緩存。
2.
選擇合適的CDN供應商
- 優先選有台灣 POP 的供應商(Cloudflare、Akamai、AWS CloudFront、GCP CDN、Fastly)。
- 考量點:邊緣節點位置、TLS/HTTP3 支援、緩存規則彈性、API 清除緩存、價格(egress 與請求成本)、原點保護 (origin shielding)。
3.
DNS與域名設計(群站最佳實踐)
- 靜態資源用無 Cookie 的專用子域名(static.example.tw),避免 cookie 傳輸浪費帶寬。
- 設定 CNAME 指向 CDN 提供的域名,同時在 DNS 設定短 TTL(測試期)再延長到 300s~3600s。
4.
CDN 設定詳步
- 建立 Site / Distribution:設定 Origin(帶備援 IP 或 LB)、Origin Shield(如果有)。
- 行為(Behaviors):對靜態資源(.js .css .jpg .png .svg)設長 TTL;對動態 API 設短 TTL 或不緩存。
- Headers:確保 Forward 的 Header 最小化(移除 Cookie、Authorization 除非需穿透)。
5.
伺服器端 Cache-Control 與 ETag 設置
- 靜態資源(指紋化檔名):
Cache-Control: public, max-age=31536000, immutable
- 常變但可短期緩存:
Cache-Control: public, max-age=300, stale-while-revalidate=60
- 動態或需版本控制:
使用 ETag 或 Last-Modified,並搭配 304 回應以節省頻寬。
6.
Nginx 與 Varnish 實作範例
- Nginx 範例(設定靜態緩存 header):
add_header Cache-Control "public, max-age=31536000, immutable";
- Varnish VCL(只緩存 GET/HEAD,排除有 Cookie):
if (req.http.Cookie) { return (pass); } else { return (hash); }
7.
CDN 清除與預熱(Purge & Warm-up)
- 使用 API 做精準清除(例:Cloudflare)
curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache" ...
- 發佈新版本時先上傳靜態到 CDN(或用 pre-warm script)以提高初期緩存命中率。
8.
壓縮、影像優化與傳輸協定
- 啟用 Brotli 或 Gzip(伺服器或 CDN),對文本型內容開啟壓縮。
- 影像:使用 WebP/AVIF,並提供自動 WebP 轉換或使用 CDN 的 Image Optimization 功能。
- 開啟 HTTP/2 或 HTTP/3、TLS 1.3 以減少握手延遲與加快並行請求。
9.
監控、測試與驗證步驟
- 實際測試:
curl -I -H "Accept-Encoding: br" https://static.example.tw/app.js 檢查 age、cf-cache-status 或 x-cache header。
traceroute 或 mtr 檢查路徑,ping 檢查 RTT。
- 指標:Cache Hit Ratio(CDN+Origin)、帶寬下降量、P95/P99 延遲,並建立告警閾值。
10.
實戰優化流程(Step-by-step)
- 1) 列出熱門資源與流量最高的 URL。2) 把靜態資源移至無 cookie 子域並加入指紋。3) 在 CDN 建行為並設定長 TTL。4) 在原站回傳 Cache-Control/ETag。5) 啟用壓縮與圖片優化。6) 測試(curl/traceroute),觀察 Cache Hit 率並微調 TTL/排除規則。
11.
問答 1
問:台灣用戶延遲高,先做 CDN 還是先優化原站? 答:建議同時進行:立刻啟用 CDN 拉低邊緣延遲與帶寬,並同步做原站優化(減少不必要的後端計算、啟用 GZIP/Brotli、設定正確 Cache-Control)。
12.
問答 2
問:如何判斷哪些 API 可以被緩存? 答:根據 API 的變動頻率與一致性判斷:頻繁變動且含用戶專屬資料的不宜緩存;返回可重用公共數據的 API 可用短 TTL 或 stale-while-revalidate 策略緩存,先在測試環境以偽造資料驗證結果一致性。
13.
問答 3
問:清除緩存會影響延遲和流量嗎? 答:會的,全面清除會導致短時間內大量回源請求增加延遲與帶寬。建議採用精準清除、分段預熱、或僅對失效資源清除,並在低流量時段執行大範圍更新。
来源:结合CDN与缓存策略优化台湾群站服务器访问延时与带宽消耗