Skip to content

CDN (Content Delivery Network) 内容分发网络

一、什么是 CDN?

CDN 是一个分布式服务器网络系统,通过在全球各地部署节点服务器,将网站内容分发到最接近用户的节点,从而:

  • 加快用户访问速度
  • 减轻源服务器负载
  • 提高网站的可用性

二、CDN 工作原理

2.1 基本工作流程

1. 用户访问网站
   www.example.com/image.jpg
   
2. DNS 解析过程
   浏览器 -> Local DNS -> CDN DNS服务器

3. 选择最优节点
   CDN根据用户IP选择最近的节点服务器

4. 内容获取
   如果节点有缓存,直接返回
   如果没有,则从源站获取并缓存

2.2 详细步骤图解

用户 -----> 本地DNS -----> CDN全局负载均衡 
  ↑                              |
  |                              ↓
  ←------ CDN节点 ←------ CDN区域负载均衡

                |
                源站服务器

三、CDN 的主要功能

3.1 静态内容加速

  • 图片
  • CSS/JavaScript 文件
  • 静态HTML页面
  • 视频文件

3.2 动态内容加速

  • 动态页面
  • API接口
  • 实时数据

3.3 安全防护

  • DDoS 防护
  • CC 攻击防护
  • WAF(Web应用防火墙)

四、CDN 优势

4.1 性能提升

javascript
// 传统访问
用户请求 -> 源站服务器(可能很远)
延迟:200-500ms

// CDN访问
用户请求 -> 最近的CDN节点
延迟:20-100ms

4.2 成本节省

  • 减少源站带宽费用
  • 降低服务器负载
  • 提高资源利用率

4.3 可用性提升

  • 多节点备份
  • 故障自动切换
  • 防止单点故障

五、CDN 应用场景

5.1 网站加速

html
<!-- 使用CDN加载静态资源 -->
<script src="https://cdn.example.com/jquery.min.js"></script>
<link href="https://cdn.example.com/styles.css" rel="stylesheet">
<img src="https://cdn.example.com/images/logo.png">

5.2 视频加速

html
<video src="https://cdn.example.com/video.mp4"></video>

5.3 下载加速

文件下载地址:https://cdn.example.com/downloads/file.zip

六、CDN 配置最佳实践

6.1 域名配置

nginx
# Nginx CDN 配置示例
server {
    listen 80;
    server_name cdn.example.com;

    location / {
        proxy_pass http://origin.example.com;
        proxy_cache my_cache;
        proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
        proxy_cache_valid 200 302 1h;
        proxy_cache_valid 404 1m;
    }
}

6.2 缓存策略

nginx
# 缓存控制配置
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 7d;
    add_header Cache-Control "public, no-transform";
}

6.3 HTTPS 配置

nginx
server {
    listen 443 ssl;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
}

七、常见问题处理

7.1 缓存刷新

bash
# 刷新CDN缓存的API调用示例
curl -X POST "https://cdn.example.com/refresh" \
     -H "Authorization: Bearer token" \
     -d "url=https://www.example.com/image.jpg"

7.2 性能监控

javascript
// 性能监控代码示例
performance.getEntriesByType("resource").forEach(entry => {
    if (entry.name.includes('cdn.example.com')) {
        console.log(`CDN资源加载时间: ${entry.duration}ms`);
    }
});

八、选择 CDN 服务商考虑因素

  1. 节点覆盖范围
  2. 响应速度
  3. 带宽容量
  4. 价格成本
  5. 安全防护
  6. 技术支持
  7. 管理平台
  8. 统计分析