CDN是什麼:CDN的意思、使用原因與WordPress連接方式
CDN(Content Delivery Network)是把原始伺服器的檔案存放在多個地區的邊緣伺服器上,並由離訪客最近的伺服器回應的內容傳遞網路。為了確認邊緣伺服器是否從快取回應,我們查看了jsDelivr這類公開函式庫發布服務的回應標頭,結果jQuery檔案是以快取副本回應。連接WordPress的檔案網址變更方式與DNS代理方式,則依官方文件比較。
1️⃣ CDN的意思:邊緣伺服器與原始伺服器
POP(Point of Presence)是指設有邊緣伺服器的資料中心,訪客的請求會送到最近的POP。
收到請求的邊緣伺服器若已存有檔案就會直接回應;若沒有,則向原始伺服器取得檔案後回應,並存放在邊緣伺服器上。AWS的CDN服務CloudFront在第一個位元組從原始伺服器抵達時,就開始傳送給訪客(依AWS官方文件)。

邊緣伺服器只會存放訪客請求過的檔案,因此即使是同一個檔案,每台邊緣伺服器的第一次請求仍會傳到原始伺服器。
像這樣在請求進來時才取得檔案的方式稱為拉取(pull)方式,另外也有事先把檔案上傳到CDN的推送(push)方式。
2️⃣ 使用CDN的原因:距離與原始伺服器負載
訪客與伺服器的距離越遠,每個請求的往返時間(RTT)就越長。開啟一個頁面時,除了HTML之外還會同時產生圖片、CSS和JavaScript的請求,所以由附近的邊緣伺服器回應時,每個請求的往返時間都會縮短。
由邊緣伺服器回應的請求不會傳到原始伺服器,因此原始伺服器的CPU使用量與傳輸量(頻寬)也會減少。透過Cloudflare代理連接DNS時,原始伺服器的IP不會曝光,DDoS攻擊也會先在CDN被阻擋(依Cloudflare官方文件)。
訪客集中在與原始伺服器同一地區的網站,從距離得到的好處很小。這類網站使用CDN更大的好處,不是縮短回應時間,而是減輕原始伺服器負載與節省傳輸量。
3️⃣ 會被快取的檔案:靜態檔案與HTML
Cloudflare在預設設定下,只會快取依副檔名判定的圖片、CSS、JavaScript等靜態檔案(依Cloudflare官方文件)。頁面HTML和JSON不在預設快取範圍內,所以連接Cloudflare之後仍由原始伺服器回應。
若要連HTML一起快取,就必須在CDN另外建立快取規則。這時要把登入使用者或購物車這類內容因人而異的頁面排除在規則外,避免其他訪客的畫面混進來。
4️⃣ 連接WordPress:檔案網址變更與DNS代理
在WordPress連接CDN時,可以只把靜態檔案的網址改成CDN網址,或把網域的DNS設定到CDN代理,讓所有請求都經過CDN。
| 方式 | 連接的位置 | 經過CDN的請求 | 原始伺服器IP |
|---|---|---|---|
| 檔案網址變更 | 在快取外掛的CDN設定中輸入CDN位址(CNAME) | 圖片、CSS、JavaScript等靜態檔案 | 維持公開 |
| DNS代理 | 把網域的DNS記錄連接到CDN代理 | 網站所有的HTTP與HTTPS請求 | 隱藏在CDN後方 |
檔案網址變更方式是在 WP Rocket 這類快取外掛的CDN設定中,輸入CDN業者提供的位址(CNAME)。輸入後,頁面HTML中圖片、CSS和JavaScript的網址就會改成CDN網址(依WP Rocket官方文件)。HTML仍由原始伺服器直接回應。

使用DNS代理方式時,網域的DNS會交由CDN業者管理。Cloudflare也提供不搬移名稱伺服器、只在現有DNS業者新增CNAME記錄來連接代理的方式。這個方式只能在Business以上的方案使用(依Cloudflare官方文件)。
5️⃣ 確認快取命中:cf-cache-status與age標頭
CDN是否從快取回應檔案,可以從回應標頭確認。下面是我們查看jsDelivr發布的jQuery檔案回應標頭所用的指令與結果。
curl -sI https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js | grep -iE "^(cache-control|cf-cache-status|age|server):"cache-control: public, max-age=31536000, s-maxage=31536000, immutable
age: 45920
cf-cache-status: HIT
server: cloudflare[server: cloudflare]表示這個回應是由Cloudflare邊緣伺服器送出,Cloudflare加上的[cf-cache-status: HIT]則代表從快取回應。[age: 45920]表示這個檔案存入快取後約經過12小時45分。[max-age=31536000]是原始伺服器允許存放1年的指示。
值不是[HIT]而是[MISS]、[DYNAMIC]、[BYPASS]時,請求會走到哪裡,可以在下方圖表按值的按鈕確認。
cf-cache-status: HITcf-cache-status: MISScf-cache-status: DYNAMICcf-cache-status: BYPASSCache-Control: no-store 或 private🔢 FAQ & 推薦內容
ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。