Preview整个网站还在搭建中,当前包含较多草稿和未完成内容,暂未正式发布。
部署上线

CDN 加速配置

使用 CDN 提升全球访问速度

CDN(内容分发网络)将内容缓存到全球节点,用户访问时从最近的节点获取,大幅提升速度。

为什么需要 CDN

  • 加速访问:用户从最近的节点获取内容
  • 降低延迟:减少网络传输距离
  • 减轻服务器压力:静态资源由 CDN 承担
  • 提高可用性:节点故障时自动切换

托管平台自带 CDN

大多数托管平台自动配置 CDN,无需额外设置。

Vercel

  • 自动使用全球 CDN
  • 静态资源自动缓存
  • 支持边缘函数

Cloudflare Pages

  • 使用 Cloudflare 全球网络
  • 自动缓存优化
  • 免费无限带宽

Railway / Fly.io

  • 支持多区域部署
  • 自动路由到最近节点

独立 CDN 服务

如果自建服务器,可以使用独立 CDN。

Cloudflare(推荐)

优点

  • 免费
  • 全球节点最多
  • 自动 HTTPS
  • DDoS 防护

配置步骤

  1. 在 Cloudflare 添加网站
  2. 修改域名 Nameservers
  3. 开启 Proxy(橙色云朵)
  4. 配置缓存规则

其他 CDN

  • AWS CloudFront:与 AWS 服务集成好
  • 阿里云 CDN:国内速度快
  • 腾讯云 CDN:价格便宜

配置缓存策略

静态资源

应该长期缓存:

# Nginx 配置
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

HTML 页面

不应该缓存或短期缓存:

location ~* \.html$ {
    expires 5m;
    add_header Cache-Control "public, must-revalidate";
}

API 响应

根据业务决定:

// Next.js API Route
export async function GET() {
  return new Response(JSON.stringify(data), {
    headers: {
      'Cache-Control': 'public, s-maxage=60, stale-while-revalidate=30'
    }
  })
}

Cloudflare 缓存配置

页面规则

  1. 进入 Cloudflare → Rules → Page Rules
  2. 创建规则:
    • URL:example.com/static/*
    • 设置:Cache Level = Cache Everything
    • Edge Cache TTL = 1 month

缓存级别

  • Standard:只缓存静态资源
  • Ignore Query String:忽略查询参数
  • Cache Everything:缓存所有内容(包括 HTML)

清除缓存

# 使用 Cloudflare API
curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache" \
  -H "Authorization: Bearer {api_token}" \
  -H "Content-Type: application/json" \
  --data '{"purge_everything":true}'

图片优化

使用 WebP 格式

// Next.js Image 组件自动优化
import Image from 'next/image'

<Image
  src="/photo.jpg"
  width={800}
  height={600}
  alt="Photo"
/>

Cloudflare Images

<!-- 自动调整大小和格式 -->
<img src="https://example.com/cdn-cgi/image/width=800,format=auto/photo.jpg">

图片 CDN

  • Cloudinary:功能最全,免费 25GB/月
  • imgix:性能好,价格贵
  • Cloudflare Images:$5/月 10 万张

字体优化

自托管字体

@font-face {
  font-family: 'Inter';
  src: url('/fonts/inter.woff2') format('woff2');
  font-display: swap;
}

使用 CDN

<!-- Google Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Inter&display=swap" rel="stylesheet">

预加载和预连接

预加载关键资源

<link rel="preload" href="/critical.css" as="style">
<link rel="preload" href="/hero.jpg" as="image">

预连接到外部域名

<link rel="preconnect" href="https://api.example.com">
<link rel="dns-prefetch" href="https://analytics.example.com">

监控 CDN 性能

Cloudflare Analytics

在 Cloudflare 后台查看:

  • 请求数
  • 带宽使用
  • 缓存命中率
  • 响应时间

缓存命中率

理想情况:

  • 静态资源:> 95%
  • 动态内容:根据业务

提升缓存命中率:

  • 增加缓存时间
  • 使用一致的 URL
  • 避免不必要的查询参数

国内 CDN

如果目标用户在国内,使用国内 CDN:

阿里云 CDN

  1. 购买 CDN 服务
  2. 添加加速域名
  3. 配置源站
  4. 修改 DNS CNAME

注意:域名需要备案。

价格

  • 按流量计费:¥0.24/GB(国内)
  • 按带宽计费:¥0.53/Mbps/天

常见问题

缓存不生效

  • 检查 Cache-Control 头
  • 确认 CDN 配置正确
  • 清除 CDN 缓存

更新后用户看到旧内容

  • 使用版本化 URL(如 style.v2.css
  • 清除 CDN 缓存
  • 减少缓存时间

如何强制刷新

<!-- 添加版本号或哈希 -->
<link rel="stylesheet" href="/style.css?v=1.2.3">
<script src="/app.js?hash=abc123"></script>

最佳实践

1. 静态资源版本化

// Next.js 自动添加哈希
// /static/css/main.abc123.css

2. 使用 CDN 域名

<!-- 使用独立域名 -->
<img src="https://cdn.example.com/photo.jpg">

3. 启用压缩

# Nginx
gzip on;
gzip_types text/css application/javascript image/svg+xml;

4. 设置合理的缓存时间

  • 不变的资源:1 年
  • 经常变的资源:1 小时
  • 实时数据:不缓存

免费 CDN 对比

CDN免费额度节点数特点
Cloudflare无限300+功能最全
jsDelivr无限100+专注开源库
Vercel100GB/月全球集成部署

下一步

目录