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=NCDN 缓存时长,覆盖共享缓存的 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 提供商对比

提供商边缘节点免费套餐核心特性
Cloudflare300+有(慷慨)WAF、Workers、零流量计费
AWS CloudFront450+1TB/月(12 月)深度 AWS 集成
Fastly80+仅试用实时清除、VCL
BunnyCDN114+流量费用最低
Azure CDN200+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 "/*"