CloudFront CDN #

一、CloudFront概述 #

1.1 什么是CloudFront #

Amazon CloudFront是AWS提供的全球内容分发网络(CDN)服务,通过全球边缘节点缓存和分发内容,提供低延迟、高传输速度的内容交付。

1.2 CloudFront特点 #

text
CloudFront核心特点:
├── 全球边缘网络
│   ├── 450+边缘节点
│   ├── 13个区域边缘缓存
│   └── 覆盖47个国家
│
├── 高性能
│   ├── 低延迟
│   ├── 高传输速度
│   └── 智能路由
│
├── 多源站支持
│   ├── S3
│   ├── ELB
│   ├── EC2
│   └── 自定义源站
│
├── 安全特性
│   ├── HTTPS支持
│   ├── AWS Shield
│   ├── AWS WAF
│   └── 私有内容保护
│
└── 与AWS服务集成
    ├── S3
    ├── Lambda@Edge
    └── Route53

1.3 CloudFront使用场景 #

场景 说明
静态网站 加速静态内容分发
动态内容 加速API响应
视频流 实时和点播视频
软件分发 软件包分发
安全加速 DDoS防护

二、CloudFront分发 #

2.1 分发类型 #

text
分发类型:
├── Web分发
│   ├── 静态和动态内容
│   ├── 网站加速
│   └── API加速
│
└── RTMP分发
    ├── 流媒体
    └── 已弃用(建议使用Web分发)

2.2 创建分发 #

bash
aws cloudfront create-distribution \
    --origin-domain-name mybucket.s3.amazonaws.com \
    --default-root-object index.html

2.3 分发配置 #

text
分发配置项:
├── 源站设置
│   ├── 源站域名
│   ├── 协议策略
│   └── 自定义头
│
├── 默认缓存行为
│   ├── 路径模式
│   ├── 查看器协议策略
│   ├── 缓存策略
│   └── 源站请求策略
│
├── 价格级别
│   ├── 全部边缘节点
│   ├── 主要区域
│   └── 仅北美/欧洲
│
└── 其他设置
    ├── 备用域名(CNAME)
    ├── 自定义SSL证书
    └── 默认根对象

三、源站配置 #

3.1 源站类型 #

text
源站类型:
├── S3存储桶
│   ├── 静态内容
│   ├── 可配置OAI
│   └── 静态网站托管
│
├── 自定义源站
│   ├── ELB
│   ├── EC2实例
│   ├── 其他Web服务器
│   └── HTTP/HTTPS协议
│
└── MediaPackage
    └── 视频流

3.2 S3源站配置 #

text
S3源站配置:
├── 源站域名
│   └── bucket-name.s3.amazonaws.com
│
├── OAI(源站访问身份)
│   └── 限制S3访问
│
├── 源站路径
│   └── 指定S3目录
│
└── 源站协议策略
    └── HTTP Only或Match Viewer

3.3 自定义源站配置 #

text
自定义源站配置:
├── 源站域名
│   └── example.com或ELB域名
│
├── 协议策略
│   ├── HTTP Only
│   ├── HTTPS Only
│   └── Match Viewer
│
├── HTTP端口
│   └── 默认80
│
├── HTTPS端口
│   └── 默认443
│
└── 超时设置
    ├── 连接超时
    └── 响应超时

四、缓存配置 #

4.1 缓存策略 #

text
缓存策略配置:
├── TTL设置
│   ├── 默认TTL
│   ├── 最小TTL
│   └── 最大TTL
│
├── 缓存键设置
│   ├── 查询字符串
│   ├── Cookie
│   └── 请求头
│
└── 压缩
    └── Gzip压缩

4.2 查询字符串缓存 #

text
查询字符串缓存选项:
├── 不缓存
│   └── 忽略所有查询字符串
│
├── 缓存所有
│   └── 缓存所有查询字符串
│
└── 白名单
    └── 仅缓存指定参数

4.3 缓存失效 #

bash
aws cloudfront create-invalidation \
    --distribution-id E1234567890ABC \
    --paths "/*" "/images/*"

4.4 缓存行为示例 #

json
{
    "PathPattern": "/images/*",
    "TargetOriginId": "my-s3-origin",
    "ViewerProtocolPolicy": "redirect-to-https",
    "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6",
    "Compress": true
}

五、安全配置 #

5.1 HTTPS配置 #

text
HTTPS配置:
├── 查看器协议策略
│   ├── 允许HTTP和HTTPS
│   ├── 重定向到HTTPS
│   └── 仅HTTPS
│
├── SSL证书
│   ├── CloudFront默认证书
│   └── 自定义证书(ACM)
│
└── 源站协议策略
    ├── HTTP Only
    ├── HTTPS Only
    └── Match Viewer

5.2 签名URL和签名Cookie #

text
签名URL/Cookie用途:
├── 限制访问私有内容
├── 设置过期时间
├── 限制IP地址
└── 限制访问时间
python
import boto3
from botocore.signers import CloudFrontSigner
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes

def rsa_signer(message):
    with open('private_key.pem', 'rb') as key_file:
        private_key = serialization.load_pem_private_key(
            key_file.read(),
            password=None,
            backend=default_backend()
        )
    return private_key.sign(message, padding.PKCS1v15(), hashes.SHA1())

cloudfront_signer = CloudFrontSigner('KEY_ID', rsa_signer)

url = cloudfront_signer.generate_presigned_url(
    'https://d123456.cloudfront.net/private/video.mp4',
    date_less_than=datetime(2024, 12, 31)
)

5.3 AWS WAF集成 #

text
WAF功能:
├── Web请求过滤
├── IP地址过滤
├── 地理位置限制
├── 速率限制
└── 自定义规则

5.4 AWS Shield #

text
Shield保护:
├── Shield Standard
│   ├── 免费自动启用
│   └── 基础DDoS防护
│
└── Shield Advanced
    ├── 付费服务
    ├── 高级DDoS防护
    ├── 成本保护
    └── 专门支持团队

六、Lambda@Edge #

6.1 Lambda@Edge概述 #

text
Lambda@Edge特点:
├── 在边缘节点运行Lambda
├── 修改请求和响应
├── 低延迟处理
├── 支持Node.js和Python
└── 触发点:
    ├── 查看器请求
    ├── 查看器响应
    ├── 源站请求
    └── 源站响应

6.2 Lambda@Edge示例 #

javascript
export const handler = async (event) => {
    const request = event.Records[0].cf.request;
    
    if (request.uri.endsWith('/')) {
        request.uri += 'index.html';
    }
    
    return request;
};

6.3 Lambda@Edge使用场景 #

text
使用场景:
├── URL重写
├── A/B测试
├── 用户认证
├── 响应头修改
├── 动态内容生成
└── 地理位置路由

七、CloudFront监控 #

7.1 CloudWatch指标 #

指标 说明
Requests 请求数量
BytesDownloaded 下载数据量
BytesUploaded 上传数据量
4xxErrorRate 4xx错误率
5xxErrorRate 5xx错误率
TotalErrorRate 总错误率
CacheHitRate 缓存命中率

7.2 访问日志 #

text
访问日志配置:
├── 启用访问日志
├── 选择S3存储桶
├── 设置日志前缀
└── 分析日志数据

7.3 实时日志 #

text
实时日志特点:
├── 实时发送到Kinesis
├── 毫秒级延迟
├── 详细日志信息
└── 用于实时监控

八、CloudFront最佳实践 #

8.1 性能优化 #

text
性能建议:
├── 合理设置缓存TTL
├── 启用压缩
├── 使用HTTP/2
├── 优化查询字符串缓存
├── 使用Lambda@Edge优化请求
└── 选择合适的价格级别

8.2 安全建议 #

text
安全建议:
├── 强制HTTPS
├── 使用签名URL保护内容
├── 集成WAF
├── 启用Shield
├── 使用OAI保护S3
└── 设置安全响应头

8.3 成本优化 #

text
成本优化建议:
├── 优化缓存命中率
├── 合理设置TTL
├── 选择合适的价格级别
├── 压缩内容
├── 删除未使用的分发
└── 监控数据传输量

九、小结 #

本章介绍了CloudFront CDN:

内容 要点
分发配置 Web分发、源站配置
缓存策略 TTL、查询字符串、缓存失效
安全配置 HTTPS、签名URL、WAF
Lambda@Edge 边缘计算、请求处理
监控 CloudWatch指标、访问日志

下一步学习 #

了解CloudFront后,接下来可以:

  1. S3高级特性 - 配合S3使用
  2. Web应用部署 - 实践CDN配置
  3. 安全最佳实践 - 学习安全配置
最后更新:2026-03-28