开启 CDN 智能压缩主要针对 HTML、CSS、JS 等文本资源,图片和视频无需处理。优先选 Brotli 协议但需 HTTPS 支持,兼容性问题需考虑。
先说结论:大部分 CDN 默认开启 Gzip,手动配置时重点在于区分文件类型和避免源站重复压缩。
- 适合静态文本资源占比高的网站
- 先确认源站是否已经做过压缩
- 验收通过响应头 Content-Encoding 判断
核心结论与收益
传输体积大的主要原因是文本文件包含大量重复字符和空白。压缩算法能找到这些规律并用更短的代码代替。
行业普遍测试数据显示,Gzip 通常可减少 60%-70% 体积,Brotli 可减少 70%-80% 体积。图片和视频本身已经是压缩格式,再次压缩不仅体积减小有限,还会浪费 CDN 节点的 CPU 资源,增加首字节时间。
源站服务器配置
在开启 CDN 压缩前,建议先检查源站配置,避免双重压缩或冲突。如果 CDN 开启智能压缩,源站可关闭压缩以节省 CPU,或保持开启但确保 CDN 回源时不重复压缩。
Nginx 配置示例
server { listen 80; server_name example.com; # 开启 Gzip gzip on; # 最小压缩文件大小,避免小文件压缩后变大 gzip_min_length 1k; # 压缩类型 gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 压缩级别 1-9,建议 6 gzip_comp_level 6; # 忽略 IE6 等旧浏览器 gzip_disable "msie6"; # 添加 Vary 头,确保缓存正确 gzip_vary on;}Apache 配置示例
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript application/json DeflateCompressionLevel 6</IfModule>主流 CDN 控制台配置
CDN 压缩配置主要在服务商控制台完成,无需修改代码,但需要确认源站状态。不同厂商路径略有差异,以下为常见路径:
- 阿里云 CDN:登录控制台 > 域名管理 > 选择域名 > 页面配置 > 智能压缩 > 开启 Gzip/Brotli。
- 腾讯云 CDN:登录控制台 > 域名管理 > 选择域名 > 高级配置 > 压缩配置 > 开启智能压缩。
- 华为云 CDN:登录控制台 > 域名管理 > 选择域名 > 高级配置 > 压缩配置 > 开启。
注意:如果源站 Nginx 已开启压缩,CDN 端建议关闭或配置回源请求头,避免双重压缩。
验证与排查
使用 curl 命令模拟请求,检查响应头。
命令示例:
curl -H "Accept-Encoding: gzip" -I https://yourdomain.com/file.js查看输出中是否包含 Content-Encoding: gzip 或 Content-Encoding: br。
如果显示 Content-Encoding: identity 或没有该字段,说明压缩未生效。
浏览器验证:打开 Chrome DevTools > Network 面板 > 刷新页面 > 查看 Response Headers 中的 Content-Encoding 字段,对比 Size 与 Transferred 大小。
常见风险与规避
- 双重压缩:源站和 CDN 都开启压缩,可能导致客户端解压错误。建议只保留一端压缩,通常推荐 CDN 端压缩以减轻源站负载。
- 小文件压缩:极小的文件压缩后体积可能反而变大,建议设置最小文件大小阈值(如 1KB)。
- 缓存键配置:现代 CDN 通常自动处理
Vary: Accept-Encoding头。不建议手动将 Accept-Encoding 加入缓存键,这会导致缓存碎片化,降低命中率。确保源站或 CDN 返回正确的 Vary 头即可。 - 动态内容:频繁变化的动态接口数据压缩收益低且增加 CPU 负担,需评估后开启。