CDN配置直接影响网站访问速度与源站压力。缓存命中率低,回源请求多,页面加载慢;缓存规则配置错误,用户看到旧版本内容。CDN缓存优化的三个抓手是命中率、缓存控制头、动态内容加速。本文给出一套可直接落地的配置方法。
CDN缓存命中率低的原因排查
先看命中率数据再定位原因。常见原因四类:缓存时长过短导致频繁过期回源;URL携带随机参数(时间戳、token)导致缓存键无法命中;未设置Cache-Control头使CDN无法判断可缓存性;资源被当作动态请求直接透传。从CDN访问日志拉取回源占比高的URL,按路径聚合分析:
awk '{print $7}' cdn.log | cut -d'?' -f1 | sort | uniq -c | sort -rn | head -20
把回源次数最高的URL逐个排查,确认属于哪一类原因。CDN控制台的命中率按域名和目录维度拆分,先看哪个目录回源最多。
用Cache-Control头精确控制缓存时长
源站响应头直接决定CDN行为。静态资源强制缓存,HTML页面短缓存并配合校验:
location ~* \.(js|css|png|jpg|webp|woff2)$ {
add_header Cache-Control 'public, max-age=2592000, immutable';
}
location / {
add_header Cache-Control 'public, max-age=300, must-revalidate';
}
immutable配合文件名哈希实现长期缓存,文件内容变化时文件名变化,旧缓存自然失效。HTML页面保留ETag与Last-Modified,回源后源站返回304,客户端免重新下载。过期时间太短会导致回源频繁,太长则上线新版本不及时,按业务更新频率折中。
忽略URL参数提升命中率
统计类参数(utm_source、from、spm)会让同一资源产生无数缓存副本。在CDN控制台配置忽略指定参数:
# 示例:忽略追踪参数
ignore_url_params = ['utm_source', 'utm_medium', 'from', 'spm']
忽略后不同参数的请求命中同一个缓存对象,命中率明显回升。注意:参与内容路由的参数(版本号、语言、商品ID)不能忽略,否则返回错误版本。
动态内容加速与回源优化
接口、API无法持久缓存,但可以通过TCP优化、智能选路、回源长连接降低时延:
# CDN回源侧配置示例
origin_keepalive on;
origin_connect_timeout 2s;
origin_read_timeout 5s;
# 对可缓存接口设置短时缓存
location /api/list/ {
proxy_cache_valid 200 180s;
}
对价格、库存等强时效接口,按用户维度拆分或短时间缓存;页面静态化、接口异步加载,把动态范围收窄到最小集合。动态内容无法持久缓存,但TCP链路优化与连接复用能显著降低首字节时间。
用数据验证优化效果
优化结果用数据说话,对比前后的命中率、回源带宽、首字节耗时:
grep -c 'HIT' cdn.log
grep -c 'MISS' cdn.log
awk '/MISS/{sum+=$NF;n++} END{print n?sum/n:0}' cdn.log
命中率从70%提到95%以上,源站带宽与请求数同步下降。缓存控制头、参数过滤、动态加速三项组合调整,观察客户端表现:内容更新是否及时、接口数据是否过期。CDN配置变更后先小流量验证,再全量生效。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/cdn-huan-cun-ce-lyue-you-hua-shi-zhan-ming-zhong-lyu-ti/