返回列表

AWS帳號充值優惠 AWS CloudFront CDN加速靜態資源的配置教學

亞馬遜雲AWS / 2026-07-08 12:57:58

第一章:為什麼靜態資源特別需要 CDN

很多網站的「慢」,其實不是程式邏輯慢,而是靜態資源慢:圖片、CSS、JavaScript、字型、甚至是下載檔。當使用者每一次點進頁面都要從同一地點取回這些檔案,延遲就會累積。對全球使用者來說,問題更明顯:資料距離越遠,等待時間越長。

CDN(Content Delivery Network)的核心概念很簡單:把你常用的靜態檔,緩存在靠近使用者的邊緣節點(edge locations)。使用者請求時,優先由邊緣節點回應,而不是每次都跨洋回源。這會帶來三個直接收益:降低延遲、減少源站壓力、提升使用者體驗(也常間接改善 SEO 與轉換)。

在 AWS 生態中,CloudFront 是最常見的 CDN 選項。它的強項在於:與 S3、ALB、EC2 等源站整合順暢;提供可配置的快取行為、壓縮、HTTPS、安全策略;而且有統一的管理入口與監控指標。

第二章:在動手配置前先理解幾個關鍵名詞

你做 CloudFront 時,最容易卡住的不是按鈕,而是概念。先抓住以下幾個詞,後面操作就會順很多。

源站(Origin)

CloudFront 會向哪裡「回源」取得你沒有緩存的內容。常見源站包括:S3 bucket、HTTP 端點(例如 ALB/EC2/自建服務)。靜態資源加速最常見就是 S3。

分配(Distribution)

CloudFront 的頂層配置。一次 distribution 可以包含至少一個「行為」(Behaviors),用不同規則處理不同路徑。

行為(Behavior)與路徑模式

例如你可以把 /assets/* 指向特別的快取策略;而 /api/*(若有)則改成不快取或短快取。路徑模式的匹配順序與你期望的一致,能避免「快取錯人」或「API 被不該快取」的問題。

快取策略(Cache Policy)與快取期間(TTL)

快取策略決定 CloudFront 如何依據請求(headers、query strings、cookies 等)形成快取鍵,以及快取多久。TTL 通常會被你設成一組:最小值(min)、預設值(default)、最大值(max)。靜態檔案一般會讓它更久。

Invalidation(無效化)

當你更新了源站檔案,CloudFront 可能仍在用舊的緩存。無效化可以讓 CloudFront 立刻把指定路徑的快取清掉,重新回源取新內容。這不是免費的捷徑:大量路徑頻繁無效化會增加成本,所以建議搭配「檔名帶版本」的釋出方式。

第三章:準備工作:確保你的靜態資源可被 CloudFront 取得

以 S3 為例,你要先把靜態資源上傳到一個 bucket,並確認它的權限與 CloudFront 的回源權限。

建議的檔案命名方式:帶 Hash 的版本檔名

例如把 app.js 變成 app.9f3c2a1.js。當內容變動時,hash 會變,路徑不同,CloudFront 就會自然取得新檔案。這能大幅降低你對 Invalidations 的依賴。

設定 S3 的靜態網站或一般 Bucket 網站

CloudFront 通常不需要你開啟 S3 的「靜態網站託管」,你可以把源站指向 S3 的 REST endpoint(S3 origin)。這樣行為更一致,也比較好控權限。

讓 CloudFront 存取 S3:使用 Origin Access Control(OAC)

AWS帳號充值優惠 如果你要安全地讓 CloudFront 讀取私有 S3,建議使用 OAC(或也可使用較早的 OAI,但 OAC 逐步成為常見作法)。其目的就是:你不要把 bucket 公開給全世界,而是讓 CloudFront 以受控方式取得檔案。

實作上你需要做幾件事:建立 OAC,將其綁定到 CloudFront distribution 的 origin;同時調整 S3 bucket policy,允許特定 CloudFront 分配的存取。只要這一步沒做好,你就會看到 403 或 404,且除非你看錯誤頁內容,通常不會一眼看出原因。

AWS帳號充值優惠 第四章:建立 CloudFront 分配(Distribution)

下面用較貼近實務的流程描述。你在 AWS 主控台操作時,名稱可能因為版本略有不同,但邏輯是一樣的。

步驟 1:選擇 Web 或 RTMP

靜態資源加速通常選「Web」。

步驟 2:設定 Origin

1) 選擇「Origin domain」:通常選你的 S3 bucket 的 domain。

2) Origin access:若你使用 OAC,選擇相應的 OAC。

3) Origin protocol policy:針對 S3 這通常沒太多選擇空間,但要確保 CloudFront 能用正確協定回源。

如果你不是 S3,而是有 HTTP 端點作為源站,這裡就會涉及 HTTP/HTTPS 與回源安全性設定。

步驟 3:設定 Default Cache Behavior

這裡是決定成敗的地方之一。你需要設定:

1) Viewer protocol policy:建議設為「Redirect HTTP to HTTPS」或「HTTPS only」。你的目標是讓使用者端永遠走 HTTPS,避免混合內容與安全警告。

2) Allowed HTTP methods:靜態資源通常只需要 GET、HEAD。

3) Cache policy:可先選「CachingOptimized」等預設,但你後面最好自己調整,尤其要處理 query string 的情況。

4) Compress:建議打開。CloudFront 可在傳輸時啟用 gzip/brotli 壓縮(依資源類型與瀏覽器支援)。靜態資源通常能明顯受益。

第五章:快取規則怎麼設才合理(Cache Policy + TTL)

很多人把快取 TTL 設很短,擔心更新內容不會生效;也有人把 TTL 設到極限,最後發現更新要等半天甚至更久。

更好的思路是:你要把內容更新策略納入快取設計。最常見的解法就是「檔名帶版本」與「正確的 Cache-Control」。

靜態資源(CSS/JS/圖片/字型)的建議策略

如果你的資源檔名包含 hash(版本),你可以給很長 TTL,甚至接近一天到一年等級都合理。你要做的不是把 TTL 設成越長越好,而是「確定你不需要用時間來讓客戶拿到更新」。因為檔名一變,URL 就變,CDN 就會以新鍵獲取新檔。

一個常見做法是:default TTL 設高、max TTL 設高,min TTL 設小或設為 0(避免邊緣節點在某些情況下過度長時間)。實際數值依團隊風格與部署節奏調整即可。

Query String 與快取鍵:避免快取爆炸

若你的靜態資源 URL 帶 query string,例如 ?v=1?timestamp=...,你就要小心快取鍵組合。你選擇是否把 query string 納入快取鍵;若納入且值每次都變,快取命中率會大幅下降。

建議做法通常是:對靜態資源盡量避免在 URL 上使用會頻繁變動的 query parameter;用檔名 hash 取代它。如果真的不可避免,至少要明確定義「哪些 query 參數要被納入」而不是全部都進快取鍵。

Headers、cookies:能不加就不要加

快取鍵加入越多維度,命中率越難維持。對靜態資源而言,通常不需要 cookies,也不需要特定 headers。你只要確保內容的行為一致即可。

第六章:壓縮、HTTPS 與自訂網域(可選但很常用)

CloudFront 的價值不只是快取。你還可以把傳輸層優化做得更完整。

啟用壓縮(Compress)

如果你已經讓 CloudFront 提供壓縮,且瀏覽器支援(例如現代瀏覽器幾乎都支援),資源大小會下降,延遲與吞吐都會更好。

注意:壓縮對圖片(PNG/JPG)通常效果有限,但對 JS/CSS 以及某些字型資源通常很有感。

Viewer protocol policy 與憑證

如果你用自訂網域(例如 cdn.example.com),你需要在 CloudFront 申請/綁定憑證。建議使用 AWS Certificate Manager(ACM),確保更新和部署流程順。

同時設定 Viewer protocol policy,讓所有請求導向 HTTPS,能降低安全風險與排錯成本。

第七章:建立針對不同路徑的行為(Behaviors)

只用 Default behavior 也能跑,但當你的網站包含多種資源類型,行為分配會讓整體更精準。

示例:/assets/* 走長快取

把你的靜態打包產物放在固定路徑,例如 /assets/*。對這個路徑:

1) 只允許 GET/HEAD。

2) Cache policy 使用長 TTL。

3) 啟用壓縮。

4) 通常不快取 query(或限制只快取你需要的)。

示例:/index.html 或 /$ 特殊處理

有些網站會把 /index.html 視為「入口文件」。它可能包含對資源檔名的引用,而你的 JS/CSS 會帶 hash。這種情況下,入口文件需要更快更新。

AWS帳號充值優惠 因此你可以讓 /index.html/*(若你確定只用在前端)採用較短 TTL,確保每次發版後更快生效。

更細的做法是:用 Cache-Control: no-cachemax-age 很小,搭配無效化或輪詢策略。但如果你入口文件也用 hash,那又是另一套策略。

第八章:部署更新與無效化策略(Invalidation)怎麼用才不燒錢

當你上傳新檔到 S3,CloudFront 不一定立刻更新邊緣節點。這不是失誤,是快取機制的設計。

你可以用兩條路線:

  • 路線 A:採用檔名 hash,更新後 URL 改變,就不需要 Invalidations(通常這是最佳方案)。
  • 路線 B:若你必須更新固定路徑檔案(例如 /robots.txt/favicon.ico/index.html),就用 Invalidation 讓特定路徑立即刷新。

通常我會建議:把 Invalidations 用在少量、固定路徑的更新上;大量、頻繁的資源用 hash 檔名。這樣你既能確保更新速度,又能避免無效化成本與風險。

第九章:常見錯誤與排查方式(讓你少走彎路)

AWS帳號充值優惠 你配置 CloudFront 時,最常見的問題不是概念,而是細節。這裡列一些高頻原因與排查方法,能讓你更快找到根因。

403:回源權限不足

最常見就是 S3 bucket policy 或 OAC 沒配置好。你可能看到 CloudFront 返回 403,源站端可能也有拒絕記錄。解法通常是:

  • 確認 OAC 已綁定到 distribution 的 origin。
  • 確認 bucket policy 允許對應的 CloudFront 分配/身份。
  • 檢查資源物件是否真的存在,避免把 404/403 混在一起看。

404:物件不存在或路徑不一致

CloudFront 返回 404 的情況也常見於路徑拼接錯誤。例如你在網頁引用 /assets/app.js,但 S3 實際上是上傳到 /asset/app.js 或大小寫不同(S3 對 key 是區分大小寫的)。

建議你在部署後立即用同一套 URL(CloudFront URL)測試,並對照 S3 key。

快取命中率很低

如果你發現快取命中率不理想,通常原因是:

  • Query string 每次都變(例如 timestamp)。
  • 快取鍵包含過多 headers 或 cookies。
  • TTL 設得太短。

你可以從 CloudFront 監控指標觀察 CacheHitRate,並檢查你的 Cache policy 設定。

更新後仍顯示舊內容

這通常是 TTL 或 Cache-Control 設定造成。若你依賴快取刷新,你就要確認:

  • 靜態資源 URL 是否已使用 hash 變更。
  • 你更新的是否是快取鍵對應的路徑。
  • AWS帳號充值優惠 是否需要 Invalidation,以及是否已對正確的路徑做無效化。

記住:只更新 S3 物件內容,但 URL 沒變,CDN 很可能仍沿用舊緩存。

第十章:如何驗證成效(不是只看頁面快了)

配置完成後,你要做兩件事:確認內容正確、確認效能提升且風險可控。

測試內容一致性

用幾個典型資源測試:首頁 HTML、JS/CSS、圖片、字型、以及你特別處理的路徑。確保 CloudFront URL 回傳的狀態碼正確,且內容與預期版本一致。

觀察快取命中率與回源比例

CloudFront 的監控指標可以看到 CacheHitRate 與 origin fetch rate。命中率偏低時,表示你的快取策略與 URL 行為尚未匹配。

同時也要看回源錯誤(例如 4xx/5xx)。如果回源在錯誤狀態下被重複觸發,你可能會遇到使用者端大量失敗,卻不會立即注意到。

用瀏覽器開發者工具確認 Cache-Control

在前端頁面打開開發者工具,查看 Network 面板的 Response Headers。你可以確認:

  • 是否有 Cache-Control / ETag(視你的配置)。
  • 瀏覽器是否顯示從 cache 讀取,或標示由 CDN 提供。

AWS帳號充值優惠 如果你希望瀏覽器也快,你可能還要調整源站或 CloudFront 對應的 header 行為。

AWS帳號充值優惠 第十一章:一套可直接套用的配置建議(以靜態資源為前提)

如果你只是希望「快、穩、可更新」,這裡給你一套常見且實務友善的組合。你可以把它當作起點,再依需求微調。

Origin

S3 bucket(私有),搭配 OAC;確保 bucket policy 只允許 CloudFront 讀取。

AWS帳號充值優惠 Default behavior

Viewer protocol policy:Redirect HTTP to HTTPS 或 HTTPS only。

Allowed methods:GET, HEAD。

Cache policy:以你專案的更新頻率調整,靜態資源預設偏長。

Compress:Enable。

Behaviors 分路徑

  • /assets/*:長快取(搭配 hash 檔名)。
  • /index.html(或 /* 入口):短快取或 no-cache 機制(視你的部署策略)。

更新策略

資源檔名 hash 化:盡量不用 Invalidation。

僅對少量固定檔(入口文件、robots、manifest 等)做 Invalidation。

第十二章:把 CloudFront 當成系統的一部分,而不是一次性設定

真正穩定的 CDN,不是把按鈕點完就結束,而是把它納入部署與監控。你可以用以下習慣讓後續維運更輕鬆:

  • 部署流水線要能清楚描述:哪些檔名會變、哪些需要無效化、何時更新入口文件。
  • 監控快取命中率、回源錯誤與延遲。不要只看「今天快不快」,要看趨勢。
  • 為容易錯的地方建立檢查:OAC 權限、路徑大小寫、query string 使用規則。
  • 每次調整 Cache policy 前,先在測試環境確認行為,避免把快取鍵設太複雜導致命中率下降。

結語:你已經有一張能落地的配置路線圖

CloudFront 的設定看起來選項多,但邏輯其實是圍繞「回源安全、快取策略、更新方式、驗證監控」。只要你先把靜態資源的 URL 策略(尤其是 hash 檔名)想清楚,後續的 TTL、是否需要無效化、以及如何避免命中率下降就會變得很容易。

把你的目標講白:讓使用者拿到最新且更快的靜態內容,同時不要把源站與運維成本壓垮。用這套方法,你就能真正做到 CloudFront CDN 加速,而不是只完成一次設定。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系