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后,接下来可以:
最后更新:2026-03-28