架構(主站www→CDN picdn→源站public):
一、CDN緩存優化(核心:提高命中率,減少回源流量)
緩存優化的核心目標是「讓CDN儘量緩存你的靜態資源,少向源站(public)請求」,阿里雲CDN需配置5個關鍵項,按優先級操作:
1. 第一步:配置精準的「緩存規則」(最核心)
作用:指定哪些資源緩存、緩存多久,避免“不該緩存的緩存了,該緩存的沒緩存”。
- 操作路徑:登錄阿里雲CDN控制枱 → 左側「域名管理」→ 找到你的CDN域名(picdn.yuming.com)→ 點擊「配置」→ 下滑找到「緩存配置」→ 「緩存規則」→ 點擊「添加規則」。
- 配置內容(按資源類型分3條規則,優先級從高到低):
|
規則名稱
|
匹配模式
|
緩存鍵配置(關鍵!)
|
緩存過期時間
|
作用
|
|
圖片類資源緩存
|
後綴匹配
|
包含:jpg,jpeg,png,gif,webp,bmp,svg,ico,tiff,avif,heic
|
30天
|
圖片更新頻率低,長緩存減少回源
|
|
JS/CSS資源緩存
|
後綴匹配
|
包含:js,css,woff2,woff,ttf
|
15天
|
靜態腳本/css,中期緩存
|
|
其他靜態資源
|
前綴匹配
|
路徑:/uploads/(你的靜態資源存儲目錄)
|
7天
|
兜底緩存,覆蓋未單獨配置的資源
|
- 關鍵注意點:
- 緩存鍵配置:默認勾選「協議+域名+路徑+查詢參數」,但要點擊「高級配置」→ 「忽略參數」→ 勾選「忽略全部參數」或「忽略指定參數」(比如忽略
t=123、v=xxx這類臨時參數),避免“相同資源因參數不同被重複緩存”(比如a.jpg?t=1和a.jpg?t=2被當成兩個資源)。 - 優先級:圖片規則>JS/CSS規則>其他規則(阿里雲默認按添加順序排序,可手動拖拽調整)。
- 不要勾選「遵循源站Cache-Control」:因為你源站是HTTP回源且沒配置Cache-Control,勾選後會導致CDN不緩存,直接回源。
2. 第二步:開啓「緩存預熱」(主動把高頻資源緩存到CDN)
作用:新上線或高頻訪問的資源(比如首頁輪播圖、熱門商品圖片),主動推送到CDN節點,用户第一次訪問就命中緩存,不用等CDN回源拉取。
- 操作路徑:CDN控制枱 → 左側「緩存預熱」→ 「添加預熱任務」。
- 配置內容:
- 加速域名:選擇
picdn.yuming.com。 - 預熱URL:輸入資源完整URL(支持批量粘貼,每行1個),比如
https://picdn.yuming.com/uploads/attach/2025/09/xxx.jpg。 - 選擇「強制覆蓋」(可選,更新資源時用)→ 提交。
- 注意事項:
- 阿里雲CDN有免費預熱額度(按套餐不同,通常1000-10000條/天),優先預熱高頻訪問的資源,別浪費額度。
- 預熱完成後,在「預熱記錄」裏查看狀態(“成功”即生效)。
3. 第三步:配置「忽略URL參數」(補充緩存鍵優化)
作用:進一步避免因無關參數導致的緩存失效,和第一步的「緩存鍵忽略參數」互補。
- 操作路徑:CDN域名配置頁 → 「緩存配置」→ 「忽略URL參數」→ 點擊「設置」。
- 配置內容:選擇「忽略全部參數」(適合純靜態資源,無動態參數需求),或「忽略指定參數」(比如
t、v、timestamp等臨時參數)。 - 舉例:如果用户訪問
a.jpg?t=123和a.jpg?t=456,CDN會當成同一個a.jpg緩存,提高命中率。
4. 第四步:開啓「緩存穿透防護」(避免惡意請求打穿CDN)
作用:防止有人請求不存在的資源(比如 xxx.jpg/123),導致CDN頻繁回源(源站返回404,CDN不緩存),浪費回源流量。
- 操作路徑:CDN域名配置頁 → 「安全配置」→ 「緩存穿透防護」→ 開啓。
- 配置內容:
- 防護模式:選擇「智能防護」(阿里雲自動識別惡意請求)。
- 緩存不存在資源:勾選「緩存404狀態碼」→ 緩存時間設為「10分鐘」(短期緩存,避免重複回源)。
5. 第五步:配置「防盜鏈」(雙重保障,避免盜鏈消耗流量)
作用:只允許主站(www.yuming.com)和CDN回源IP訪問,防止別人盜用你的CDN資源(比如在其他網站直接引用你的圖片),導致額外流量消耗。
- 操作路徑:CDN域名配置頁 → 「安全配置」→ 「Referer防盜鏈」→ 開啓。
- 配置內容:
- 防盜鏈類型:選擇「白名單」。
- 允許的Referer:輸入
https://www.yuming.com/(主站域名,結尾加/匹配所有子路徑),再添加「CDN回源IP段」(從阿里雲CDN控制枱「回源配置」→ 「回源IP白名單」獲取官方IP段,複製粘貼到這裏)。 - 勾選「允許空Referer」(可選,避免部分瀏覽器直接訪問圖片時被攔截)。
二、資源壓縮(核心:減小資源體積,節省傳輸流量)
阿里雲CDN支持「Gzip壓縮」和「Brotli壓縮」(優先Brotli,壓縮率更高,節省流量更多),配置後圖片/JS/CSS體積可減少30%-70%,操作步驟如下:
1. 第一步:開啓「Brotli壓縮」(推薦優先)
- 操作路徑:CDN域名配置頁 → 「性能優化」→ 「壓縮配置」→ 找到「Brotli壓縮」→ 開啓。
- 配置內容:
- 壓縮級別:選擇「6級」(平衡壓縮率和速度,阿里雲默認推薦,級別越高壓縮率越高,但CDN節點消耗略大)。
- 壓縮文件類型:勾選你需要壓縮的資源類型,推薦:
- 文本類:js,css,html,htm,xml,json
- 圖片類:jpg,png,gif(注意:已壓縮的圖片格式如webp、avif無需再壓縮,勾選後效果有限)。
- 作用:比如1MB的JS文件,壓縮後可能只有300KB,傳輸流量直接減少70%。
2. 第二步:開啓「Gzip壓縮」(作為Brotli的兼容備份)
- 操作路徑:同一「壓縮配置」頁面 → 找到「Gzip壓縮」→ 開啓。
- 配置內容:
- 壓縮級別:選擇「6級」(和Brotli一致)。
- 壓縮文件類型:和Brotli保持一致(文本類+部分圖片類)。
- 作用:部分老舊瀏覽器不支持Brotli,會自動使用Gzip壓縮,確保所有用户都能享受壓縮效果。
3. 第三步:源站Nginx同步配置壓縮(可選但推薦)
如果CDN回源時,源站(public.yuming.com)返回的資源已壓縮,CDN可直接轉發,減少CDN節點的壓縮壓力。在源站的Nginx配置中添加以下代碼:
server {
listen 80;
server_name public.yuming.com;
root /cipan/www/wwwroot/yuming/public;
# 開啓Gzip壓縮(和CDN兼容)
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/jpeg image/png image/gif;
gzip_comp_level 6;
gzip_min_length 1k; # 小於1KB的文件不壓縮(避免浪費資源)
gzip_vary on; # 告訴CDN和瀏覽器該資源已壓縮
# 其他配置(IP白名單、禁止敏感文件等,保持之前的配置)
}
三、配置生效與驗證(確保優化落地)
1. 生效時間:
- 緩存規則、壓縮配置:提交後1-5分鐘生效(阿里雲CDN配置同步有延遲)。
- 緩存預熱:通常5-30分鐘生效(取決於資源大小和節點數量)。
2. 驗證方法(用curl命令或瀏覽器開發者工具):
(1)驗證緩存是否生效:
在本地終端執行命令(替換成你的圖片URL):
curl -I https://picdn.yuming.com/uploads/attach/2025/09/xxx.jpg
- 若返回頭中有
X-Cache: HIT(命中緩存),説明緩存生效;若為X-Cache: MISS(未命中),刷新幾次再試(首次訪問可能未緩存)。 - 查看
Cache-Control頭,確認過期時間和你配置的一致(比如max-age=2592000對應30天)。
(2)驗證壓縮是否生效:
同樣用curl命令(添加 -H "Accept-Encoding: br,gzip" 模擬瀏覽器請求):
curl -I -H "Accept-Encoding: br,gzip" https://picdn.yuming.com/xxx.js
- 若返回頭中有
Content-Encoding: br(Brotli)或gzip,説明壓縮生效。 - 對比壓縮前後的文件大小:用瀏覽器「開發者工具」→ 「Network」→ 查看資源的「Size」(壓縮後大小)和「Content-Length」(原始大小),確認體積減少。
(3)查看阿里雲CDN監控:
- 控制枱 → 「監控報表」→ 「緩存命中率」:目標≥90%(越高越好,説明大部分請求從CDN返回,少回源)。
- 「流量報表」→ 「回源流量」:配置後應明顯下降(緩存生效)。
- 「壓縮率報表」:查看Brotli/Gzip的壓縮率(通常≥30%)。
四、額外優化技巧(進一步節省流量)
- 圖片格式轉換:在阿里雲CDN開啓「圖片處理」功能(控制枱 → 「媒體處理」→ 「圖片處理」),將jpg/png自動轉換為webp/avif格式(體積比jpg小50%+,且質量無損),配置後CDN會自動向支持的瀏覽器返回優化格式。
- 過期資源刷新:如果資源更新了(比如圖片替換),在CDN控制枱「緩存刷新」→ 「添加刷新任務」,輸入更新的URL,強制CDN重新拉取最新資源(避免用户看到舊圖)。
- 關閉不必要的緩存:對動態資源(比如.php、.jsp),在緩存規則中添加「後綴匹配:php,jsp」→ 緩存時間設為「0秒」(不緩存),避免動態內容被緩存導致異常。
總結
按以上步驟配置後,你的阿里雲CDN緩存命中率會提升到90%以上,靜態資源體積減少30%-70%,回源流量和傳輸流量會顯著下降。核心是「緩存規則精準配置+Brotli壓縮+防盜鏈」,這三步是最見效的,後續只需通過監控報表觀察命中率和壓縮率,按需調整即可~