CDN配置指南
Cache-Control 响应头
# 静态资源 (JS/CSS/图片) — 长期缓存
Cache-Control: public, max-age=31536000, immutable
# HTML 页面 — 每次重新验证
Cache-Control: no-cache
# API 响应 — 短期缓存
Cache-Control: public, max-age=60, s-maxage=300
# 私有用户数据 — 不在 CDN 缓存
Cache-Control: private, no-store
# CDN 专用 (Cloudflare)
CDN-Cache-Control: max-age=86400
Cache-Control 指令说明
| 指令 | 说明 |
|---|---|
| max-age=N | 缓存 N 秒(浏览器+CDN) |
| s-maxage=N | CDN 缓存时长,覆盖共享缓存的 max-age |
| public | 可被 CDN 和代理存储 |
| private | 仅浏览器缓存,CDN/代理不存储 |
| no-cache | 使用前必须重新验证(并非"不缓存") |
| no-store | 完全不存储 |
| immutable | 在 max-age 期间内容不会改变 |
| stale-while-revalidate=N | 后台刷新时提供旧版内容 |
Nginx 源站配置
server {
listen 80;
server_name origin.example.com;
# 静态文件 — 长期缓存
location ~* \.(js|css|woff2|png|jpg|svg|ico)$ {
expires 1y;
add_header Cache-Control "public, max-age=31536000, immutable";
add_header Vary "Accept-Encoding";
}
# HTML — 不缓存
location ~* \.html$ {
add_header Cache-Control "no-cache";
}
# API
location /api/ {
add_header Cache-Control "public, max-age=60, s-maxage=300";
proxy_pass http://app:8080;
}
}
主流 CDN 提供商对比
| 提供商 | 边缘节点 | 免费套餐 | 核心特性 |
|---|---|---|---|
| Cloudflare | 300+ | 有(慷慨) | WAF、Workers、零流量计费 |
| AWS CloudFront | 450+ | 1TB/月(12 月) | 深度 AWS 集成 |
| Fastly | 80+ | 仅试用 | 实时清除、VCL |
| BunnyCDN | 114+ | 无 | 流量费用最低 |
| Azure CDN | 200+ | 无 | Azure 生态集成 |
缓存刷新
# Cloudflare API 单文件刷新
curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache" \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
--data '{"files":["https://example.com/style.css"]}'
# 全量刷新
--data '{"purge_everything":true}'
# AWS CloudFront 失效
aws cloudfront create-invalidation \
--distribution-id EDFDVBD6EXAMPLE \
--paths "/*"