
AWS CloudFront 用于把网站内容分发到边缘节点,减少用户到源站的访问距离,降低源站压力。适合加速图片、CSS、JS、下载文件、视频、公开页面和部分 API 响应。CloudFront 支持静态和动态内容分发,也可以与 S3、负载均衡、API Gateway、Lambda Function URL 等源站配合使用。(AWS 文档)
AWS CloudFront 是什么
CloudFront 负责内容分发
CloudFront 是 CDN 服务。
用户访问网站资源时,请求会先到 CloudFront 边缘节点。
如果边缘节点已有缓存,直接返回内容;如果没有缓存,CloudFront 再向源站回源获取内容。
标准架构理解:
| 服务 | 作用 |
| EC2 / ALB | 运行网站和应用 |
| S3 | 保存图片、附件、静态资源 |
| CloudFront | 分发、缓存、加速访问 |
| ACM | 提供 HTTPS 证书 |
| Route 53 / DNS | 解析自定义域名 |
EC2 负责应用运行,S3 负责文件存储,CloudFront 负责访问加速。
静态资源已经放到 S3 的项目,可以参考 AWS S3教程,先把文件存储和权限整理好再接 CloudFront。
适合使用 CloudFront 的场景
CloudFront 适合跨境网站、海外业务站点、图片站、下载站、WordPress 静态资源、S3 文件分发、前端静态页面和部分可缓存 API。
适合缓存的内容包括:
| 内容类型 | 缓存建议 |
| 图片 | 长缓存 |
| CSS / JS | 长缓存,文件名带版本号 |
| 字体文件 | 长缓存 |
| 下载文件 | 中长缓存 |
| 公开文档 | 中长缓存 |
| 公开页面 | 按更新频率设置 TTL |
登录页、购物车、支付接口、会员后台、订单页、实时数据接口不能直接长期缓存。用户相关内容被错误缓存,会造成数据错乱和安全风险。
创建 CloudFront Distribution 前要确认什么
确认源站类型
CloudFront 需要配置 Origin。Origin 是 CloudFront 回源获取内容的位置。
源站可以是 S3 bucket、S3 静态网站端点、Application Load Balancer、EC2 Web 服务、API Gateway、Lambda Function URL 或其他自定义 HTTP 源站。(AWS 文档)
常见选择如下:
| 源站 | 适合场景 |
| S3 bucket | 图片、附件、JS、CSS、下载文件 |
| EC2 | 单台 Web 服务器、WordPress、自建应用 |
| ALB | 多台 EC2 后端、生产业务 |
| API Gateway | API 服务 |
| Lambda Function URL | 轻量接口、边缘分发前端入口 |
如果源站是 EC2,先完成服务器开通、Web 服务、域名、端口和安全组配置。相关流程可以阅读 亚马逊云服务器购买。
确认缓存路径
不要用一个默认缓存规则覆盖整个网站。正式项目应按路径拆分 Cache Behavior。
| 路径 | 建议 |
| /static/* | 长缓存 |
| /images/* | 长缓存 |
| /download/* | 中长缓存 |
| /api/public/* | 按接口设置 |
| /api/user/* | 不缓存或短缓存 |
| /admin/* | 不缓存 |
| /cart/* | 不缓存 |
| /checkout/* | 不缓存 |
CloudFront 的 cache behavior 可以按 URL path pattern 设置不同缓存规则,例如针对图片目录、静态文件目录或 API 路径使用不同策略。(AWS 文档)
确认 HTTPS
正式网站应使用 HTTPS。CloudFront 可以要求用户到 CloudFront 使用 HTTPS,也可以要求 CloudFront 到源站使用 HTTPS。
AWS 文档说明,如果要确保 CloudFront 从源站获取的对象也经过加密,应让 CloudFront 与源站之间使用 HTTPS。(AWS 文档)
自定义域名需要配置 SSL/TLS 证书。
一般用 AWS Certificate Manager 申请证书,再绑定到 CloudFront distribution。证书、域名验证、DNS 解析要在上线前处理好。
AWS CloudFront 基础配置流程
创建 Distribution
进入 CloudFront 控制台,选择 Create distribution。
核心配置项如下:
| 配置项 | 判断方式 |
| Origin domain | 选择 S3、ALB、EC2 域名或 API 地址 |
| Origin protocol policy | 源站支持 HTTPS 时优先 HTTPS |
| Viewer protocol policy | 正式网站选择 Redirect HTTP to HTTPS 或 HTTPS only |
| Cache policy | 静态资源用缓存策略,动态接口谨慎缓存 |
| Alternate domain name | 绑定自定义域名 |
| Custom SSL certificate | 选择 ACM 证书 |
| Web Application Firewall | 有安全需求时接 AWS WAF |
创建后,CloudFront 会分配一个 cloudfront.net 域名。
正式网站应绑定自己的域名,不建议长期使用默认域名作为用户访问入口。
配置 S3 源站
S3 作为源站时,不建议公开整个 bucket。
更好的做法是使用 Origin Access Control,让 CloudFront 有权限访问私有 S3 bucket,用户只能通过 CloudFront 访问文件。
AWS 文档说明,配置 OAC 前需要让 CloudFront 有权访问 S3 bucket,并通过 bucket policy 限定 CloudFront distribution 访问。(AWS 文档)
推荐结构:
| 项目 | 设置 |
| S3 bucket | 保持私有 |
| CloudFront | 配置 S3 origin |
| OAC | 授权 CloudFront 访问 S3 |
| Bucket policy | 只允许指定 distribution 访问 |
| 用户访问入口 | CloudFront 域名或自定义域名 |
不要为了让图片能打开,直接关闭 S3 Block Public Access。
公开权限应由业务需求决定,不应作为临时调试手段长期保留。
配置 EC2 或 ALB 源站
EC2 或 ALB 作为源站时,要确认源站本身可正常访问。
源站协议、端口、安全组、HTTPS 证书和 Web 服务都要先配置完成。
生产环境更适合用 ALB 作为源站,而不是直接把单台 EC2 暴露给 CloudFront。ALB 后面可以接多台 EC2,后续扩容和故障切换更清晰。
源站安全组不应无意义开放全部端口。
只开放 Web 服务需要的端口,例如 80 和 443。
后台管理路径、数据库端口、SSH 端口不应通过 CloudFront 对外暴露。
CloudFront 缓存规则怎么设置
TTL 按内容变化频率设置
TTL 控制 CloudFront 缓存对象的时间。
AWS 文档说明,CloudFront 可以通过 Minimum TTL、Default TTL、Maximum TTL 控制对象在缓存中的保留时间。(AWS 文档)
静态资源适合长缓存,但文件名要带版本号。例如:
/app.20260601.js
/style.v3.css
/product-image-v2.jpg
文件名带版本号后,可以放心设置较长 TTL。
资源更新时生成新文件名,用户会请求新地址,不需要频繁清除旧缓存。
动态页面、价格页、库存页、用户相关页面要设置短缓存或不缓存。
登录态、购物车、支付、会员中心等路径应排除缓存。
Query String、Cookie、Header 不要全部转发
CloudFront 的缓存命中率受 query string、cookie、header 影响。
AWS 文档说明,如果基于 query string 参数缓存,CloudFront 会按不同参数值缓存不同对象;参数越多,请求转发和缓存对象数量越容易增加。(AWS 文档)
处理原则如下:
| 类型 | 建议 |
| 静态资源 | 不转发 Cookie,少转发 Header |
| 图片尺寸参数 | 只转发必要 query |
| 公开 API | 只保留影响响应的参数 |
| 登录状态 | 不缓存或单独路径处理 |
| AB 测试 | 只转发必要 Cookie 或 Header |
转发参数越多,缓存 key 越复杂。
缓存命中率下降后,CloudFront 会频繁回源,源站压力和响应延迟都会增加。
CloudFront 费用怎么看
费用主要来自流量和请求
CloudFront 成本主要看数据传输、HTTP/HTTPS 请求、缓存失效、边缘函数、实时日志和附加功能。AWS CloudFront pricing 页面说明,CloudFront 按数据传输、请求和功能使用计费;AWS origin 到 CloudFront 的数据传输在通过 CloudFront 服务流量时会自动免除。(Amazon Web Services, Inc.)
常见费用项目:
| 项目 | 说明 |
| Data Transfer Out | CloudFront 到用户的出站流量 |
| HTTP / HTTPS Requests | 用户请求次数 |
| Invalidation | 清除缓存路径 |
| CloudFront Functions | 边缘轻量逻辑 |
| Lambda@Edge | 边缘计算逻辑 |
| Real-time logs | 实时日志 |
| Origin Shield | 源站保护和集中回源 |
网站真实成本要把 EC2、S3、CloudFront、日志和流量一起计算。
关于服务器、CDN、存储和带宽费用,可以参考 亚马逊云服务器价格。
Invalidation 不应作为常规发布方式
CloudFront 支持缓存失效。AWS 文档说明,用户可以创建 invalidation 来清除指定文件路径;每月前 1,000 个 invalidation paths 免费,超出后按路径计费。(AWS 文档)
频繁 invalidation 不是最佳发布方式。静态文件应使用版本化文件名。
页面内容可以通过短 TTL 或按路径缓存控制处理。
只有紧急更新、错误文件清理、合规删除等场景,才适合使用 invalidation。
长期流量要提前规划付款和账单
CloudFront 流量增长后,账单会持续增加。
图片、视频、下载文件、安装包和跨境访问量大的站点,应提前估算月流量和请求数。
长期项目需要稳定付款、充值续费和账单核对时可以了解 AWS代付。
如果同时需要账号开通、CDN 配置、账单核对和基础技术支持,可以考虑 AWS代理。
具体优惠应按账号类型、充值金额、产品范围和实际规则确认。
CloudFront 常见配置错误
整站长期缓存
整站长期缓存会导致页面更新不生效,用户看到旧内容。
电商站还可能出现库存、价格、购物车和登录状态异常。
正确方式是按路径配置:
| 路径类型 | 处理 |
| 静态资源 | 长缓存 |
| 公开页面 | 中短缓存 |
| API | 按接口判断 |
| 登录和后台 | 不缓存 |
| 支付和订单 | 不缓存 |
源站仍然完全公开
CloudFront 配好后,如果源站仍然允许所有用户直接访问,用户可以绕过 CloudFront。
S3 源站应使用 OAC 限制访问;自定义 HTTP 源站可以用自定义 header、WAF、源站安全策略等方式减少绕过访问。
AWS 文档也把限制源站访问列为私有内容控制方式之一,包括为 S3 bucket 设置 OAC。(AWS 文档)
缓存命中率过低
缓存命中率低,CloudFront 就会频繁回源。常见原因是 TTL 太短、query string 全部转发、Cookie 全部转发、Header 全部转发、文件没有版本号、动态路径和静态路径没有分开。
CloudFront 的价值不只在节点数量,也在缓存策略。
缓存规则设置错误,CDN 会变成昂贵的转发层。
CloudFront 的配置顺序
正式配置时按这个顺序执行:
| 步骤 | 操作 |
| 源站确认 | 选择 S3、EC2、ALB 或 API Gateway |
| 内容分类 | 区分静态资源、公开页面、动态接口 |
| 权限设计 | S3 用 OAC,源站减少直接暴露 |
| HTTPS 配置 | 自定义域名绑定 ACM 证书 |
| 缓存规则 | 按路径设置 cache behavior |
| 参数转发 | 只转发必要 query、cookie、header |
| 费用评估 | 估算流量、请求、invalidation 和日志成本 |
| 上线检查 | 测试访问、缓存命中、回源、HTTPS 和日志 |
CloudFront 适合怎样使用
静态资源、图片、CSS、JS、字体和下载文件适合通过 CloudFront 分发。
登录、购物车、支付、订单、会员后台和实时接口应单独处理,不要无脑缓存。
S3 和 CloudFront 应一起规划。
S3 保存文件,CloudFront 对外分发,OAC 控制源站访问。
EC2 或 ALB 源站则要提前处理安全组、HTTPS、后端服务和源站保护。
CloudFront 配置的重点是内容分类、缓存策略、源站权限和费用控制。访问速度只是结果,真正决定长期稳定性的,是缓存命中率、回源规则、HTTPS、账单和权限边界。


