CDN静态资源加速缓存策略:http缓存头这样写才对
CDN介绍 2025-09-20 20:07 83

2025年9月,国内主流云厂商在CDN控制台陆续上线了“缓存头体检”功能,一经检测不合规便亮红,提醒“缓存命中率低于60%”。不少运维同事一脸懵:TTL设了、文件也做了哈希,为什么还是飘红?问题往往出在http缓存头写得“太保守”或“太奔放”。下面把最新踩坑实录和一线配置模板整理出来,照着改,基本一次过。

一、为什么“写对缓存头”突然成了硬指标

1. 流量红利见顶,厂商开始“按字节算账”——回源流量费比边缘流量贵3~5倍,低命中率直接把账单拉高。
2. 百度在《2025搜索体验白皮书》里把“首包缓存命中率”纳入站点质量分,命中低将间接影响SEO排名。
3. 浏览器对“重复验证”越来越不客气:Chrome 126起,对带no-cache、max-age=0的脚本自动延迟5秒执行,LCP直接炸裂。

二、缓存头三件套的新解读

1. Cache-Control:优先级最高,写错一条,其余白搭。
2. Expires:老协议保留,仅对HTTP/1.0客户端有效,可写但别依赖。
3. ETag/Last-Modified:协商缓存字段,命中304能省带宽,但多一次RTT;静态资源尽量走“强缓存”而不是“协商缓存”。

三、四档资源模板(复制即可用)

1. 永久不变:第三方库、字体、logo

location ~* \.(woff2|ttf|ico|jpg|png)$ {
    add_header Cache-Control "public, max-age=31536000, immutable";
    add_header ETag "";        # 关掉ETag,杜绝304
    add_header Last-Modified ""; # 同上
}

说明:immutable告诉浏览器别条件请求,HTTP/2下可省一次往返;ETag留空避免nginx自动生成。

2. 业务静态:自家打包后的js/css

location ~* \.(js|css)$ {
    add_header Cache-Control "public, max-age=2592000"; # 30天
    # 文件名带hash,内容变则URL变,旧缓存自然失效
}

说明:如果还未接入webpack/vite带hash,请优先改造,比任何“短TTL+强刷”都省钱。

3. 低频刷新:活动页、海报图

location /act/2025 {
    add_header Cache-Control "public, max-age=86400, stale-while-revalidate=86400";
}

说明:用户侧1天内直接读缓存;CDN可在后台异步回源,活动爆发期零回源风暴。

4. 零缓存:html入口、接口

location / {
    add_header Cache-Control "no-cache, must-revalidate"; # 允许缓存但强制验证
    add_header X-Accel-Expires "0"; # 对CDN也生效
}

说明:html让搜索引擎抓到最新版本,同时保留304优化。

四、最容易忽略的五个细节

1. 带query的URL默认被CDN视为不同文件,若?from=wx&uid=123仅用于统计,请在控制台开启“忽略参数”。
2. 用了gzip压缩,必须保证Content-Length与ETag同时基于压缩后内容,否则第一次304后浏览器会拿到空包。
3. 302/301跳转也会被缓存,时间还很长;更新跳转地址后记得目录刷新,不然老用户永远进旧地址。
4. Range回源对大视频是利器,但一定先确认源站支持206响应,否则CDN会无限回源拉满整个文件。
5. 浏览器DevTools里“Disable cache”仅对本机生效,排查线上缓存请用curl -H "Pragma: akamai-x-cache-on"看X-Cache头。

五、一键检测脚本

#!/bin/bash
url=$1
echo "=== 缓存头体检 ==="
curl -sI "$url" | grep -E 'Cache-Control|ETag|Last-Modified|X-Cache|Age'

跑通后,Age值应该≈0为首次MISS,再跑Age递增即HIT;若反复出现Age=0且X-Cache=MISS,说明缓存规则未匹配,优先检查路径正则。

六、小结

CDN加速不是“打开开关”就结束,缓存头才是真正的方向盘。把静态资源当“只读”处理,给足强缓存;把入口文件当“新闻”处理,留足验证空间;同时善用immutable、stale-while-revalidate这类现代指令,命中率轻松提到90%以上,源站带宽账单立降七成。趁着9月各大云还在推“命中率挑战赛”,按上面模板撸一遍,基本能一次通关。

Powered by ©IDCSMART