初识 AWS CloudFront:AWS 官方 CDN 服务入门 – wiki基地


初识 AWS CloudFront:AWS 官方 CDN 服务入门

在当今互联网时代,用户对网站和应用程序的访问速度有着极高的要求。如果一个网站加载缓慢,用户很可能失去耐心并选择离开。特别对于服务全球用户的应用来说,仅仅将内容托管在一个地理位置,会导致距离较远的用户面临显著的网络延迟。为了解决这个问题,内容分发网络(CDN,Content Delivery Network)应运而生。CDN 通过在全球部署大量服务器节点(称为边缘站点),将网站的静态和部分动态内容缓存到离用户最近的地方,从而显著提升访问速度、减轻源服务器压力并增强安全性。

AWS CloudFront 是亚马逊网络服务(AWS)提供的一项高性能的全球内容分发网络服务。作为 AWS 的官方 CDN,CloudFront 能够与 AWS 生态系统中的其他服务(如 S3、EC2、ALB 等)无缝集成,同时也支持将您的源站设置在 AWS 之外。本文将带您初步认识 AWS CloudFront,了解它的核心概念、工作原理、主要优势以及如何创建一个简单的 CloudFront 分发。

1. 什么是 AWS CloudFront?

AWS CloudFront 是一种快速内容分发网络 (CDN) 服务,它安全地以低延迟和高传输速度向全球客户分发静态和动态 Web 内容(如 .html、.css、.js、图像文件以及流媒体文件)。CloudFront 的核心是其全球网络,由遍布世界各地数百个的接入点(Points of Presence, PoPs),也称为边缘站点(Edge Locations)组成。

当用户请求访问您通过 CloudFront 分发的内容时,请求会被自动路由到离用户最近的边缘站点。如果该边缘站点已经缓存了所需的内容,它会直接将内容返回给用户,无需回源。如果内容尚未缓存,边缘站点会向您的源站(Origin,例如 S3 存储桶或 Web 服务器)请求内容,并在返回给用户的同时将内容缓存起来,以便下次来自同一区域或附近区域的用户可以更快地获取。

简单来说,CloudFront 就是一个“全球性的内容分发加速器”,它将您的内容复制(缓存)到离您的用户更近的地方,让用户感觉内容就在“家门口”。

2. 为什么要使用 CloudFront?

使用 CloudFront 带来了多方面的显著优势:

2.1 提升访问速度 (Performance)

  • 降低延迟: 利用全球广泛分布的边缘站点,将内容缓存到离最终用户最近的位置,大大减少了数据传输的物理距离和网络跳转次数,从而显著降低了用户访问的延迟,页面加载速度更快。
  • 优化路由: CloudFront 使用智能路由技术,自动将用户请求路由到最佳的边缘站点。
  • 协议优化: 支持 HTTP/2 和 TLS 1.3 等现代协议,进一步提高了传输效率和安全性。
  • 减少源站负载: 大部分用户请求由边缘站点直接响应(缓存命中),只有少数请求需要回源。这极大地减轻了源站服务器的压力,使其能够更专注于处理动态请求或其他核心业务逻辑。

2.2 提高可用性和可靠性 (Availability & Reliability)

  • 源站故障隔离: 即使您的源站发生故障,如果边缘站点已经缓存了内容,它仍然可以继续为用户提供服务(取决于缓存策略)。
  • 分布式架构: CDN 本身就是一个高度分布式的系统,单个边缘站点的故障不会影响整个网络的可用性。
  • 自动扩展: CloudFront 能够自动应对流量峰值,无需您手动进行扩展配置。

2.3 增强安全性 (Security)

  • DDoS 防护: CloudFront 本身提供了抵御常见的网络层和传输层 DDoS 攻击的能力。
  • 与 AWS WAF 集成: 可以轻松地将 CloudFront 与 AWS Web Application Firewall (WAF) 集成,以抵御常见的 Web 应用程序攻击,如 SQL 注入、跨站脚本 (XSS) 等。
  • HTTPS 支持: 提供免费的 Amazon Certificate Manager (ACM) 提供的 SSL/TLS 证书,支持通过 HTTPS 安全地分发内容,加密用户与边缘站点之间的连接,提升用户信任度。
  • 访问控制: 支持通过签名 URL 或签名 Cookies 来限制对特定内容的访问,确保只有授权用户才能访问私有内容。
  • 源访问控制 (OAC/OAI): 提供安全的方式让 CloudFront 访问 S3 源站内容,而无需使 S3 存储桶公开可访问,增强了源站的安全性。

2.4 降低成本 (Cost)

  • 优化数据传输成本: 虽然 CloudFront 收取数据传出费用,但在许多情况下,从 CloudFront 边缘站点向最终用户传输数据的费用要低于从您的源站(尤其是在远离用户的区域)直接传输给全球用户的费用。
  • 降低源站基础设施成本: 由于减轻了源站负载,您可能可以减少源站服务器的数量或规格,从而降低服务器和带宽成本。
  • AWS Free Tier: AWS 提供 CloudFront 的免费套餐,包括一定量的数据传出和 HTTP/S 请求,对于测试或流量不大的应用非常友好。

2.5 简化操作和管理

  • 托管服务: CloudFront 是一个完全托管的服务,AWS 负责底层基础设施的维护、扩展和安全加固,您无需关心服务器的管理。
  • 与 AWS 生态集成: 与 S3、EC2、Route 53、ACM、WAF、Lambda@Edge 等服务无缝集成,可以构建强大的内容分发架构。
  • 易于配置: 通过 AWS 管理控制台、CLI 或 API 都可以方便地创建和管理 CloudFront 分发。

3. CloudFront 的核心概念和工作原理

理解 CloudFront 的工作原理,需要掌握几个核心概念:

3.1 边缘站点 (Edge Locations)

这是 CloudFront 全球网络的基础,是离用户最近的物理数据中心。CloudFront 将内容缓存到这些边缘站点。数量众多且地理位置分散是其关键特点。

3.2 区域边缘缓存 (Regional Edge Caches)

在边缘站点和源站之间,CloudFront 还有一个中间层称为区域边缘缓存。当边缘站点请求的内容不在本地缓存时,它会首先尝试从其所属区域的区域边缘缓存中获取。如果区域边缘缓存中有,则无需回源。区域边缘缓存拥有更大的存储容量,可以缓存更多不经常被边缘站点请求但仍可能在区域内被请求的内容。这减少了边缘站点直接回源的频率,进一步降低了延迟和源站负载。

3.3 源站 (Origin)

源站是您的原始内容存储的地方。它可以是:

  • S3 存储桶: 最常见的静态网站托管或媒体文件存储源。CloudFront 可以轻松配置为直接从 S3 读取内容。
  • 自定义源: 任何可以通过 HTTP 或 HTTPS 访问的 Web 服务器,例如运行在 EC2 实例上的 Web 服务器、Elastic Load Balancer (ALB/NLB) 后面的服务器集群,甚至是您托管在数据中心里的服务器。
  • MediaStore/MediaPackage 等 AWS 媒体服务: 用于流媒体分发。

3.4 分发 (Distribution)

分发是 CloudFront 的核心配置单元。它定义了 CloudFront 如何从您的源站获取内容,以及如何将内容分发给最终用户。一个分发包含:

  • 源站配置 (Origins): 指定一个或多个源站。
  • 缓存行为 (Cache Behaviors): 定义基于 URL 路径模式(例如 /images/*/css/*/videos/*)如何处理不同类型请求的规则。每个行为可以指定源站、缓存设置(如何缓存、缓存多久、是否基于请求头/Cookie/查询参数进行缓存)、Viewer 协议(HTTP/HTTPS)、Origin 协议、以及是否需要签名 URL/Cookie 等。
  • 默认缓存行为 (Default Cache Behavior): 当请求的 URL 与任何其他缓存行为的路径模式都不匹配时,应用的规则。每个分发必须有一个默认行为。
  • 分发设置 (Distribution Settings): 包括 Price Class(选择包含哪些地理区域的边缘站点)、SSL 证书、日志记录、IPv6 支持、WAF 集成等。

3.5 缓存 (Caching)

缓存是 CDN 加速的关键。CloudFront 根据缓存策略将源站返回的内容(通常是静态文件)存储在边缘站点。下次有用户请求相同内容时,可以直接从缓存返回。

  • 缓存策略 (Cache Policy) / 源请求策略 (Origin Request Policy) / 响应头策略 (Response Headers Policy): 这是较新的、更细粒度的控制缓存和请求/响应行为的方式。它们允许您精确控制哪些请求头、Cookie、查询参数应包含在缓存键中(影响缓存命中率),哪些应转发到源站,以及如何处理源站返回的响应头(例如添加安全相关的响应头)。这些策略可以与缓存行为关联。
  • 生存时间 (TTL – Time To Live): 定义缓存内容在边缘站点保留多久(即缓存过期时间)。可以通过源站设置的 Cache-ControlExpires HTTP 头来控制,也可以在 CloudFront 缓存策略中配置最小、最大和默认 TTL。
  • 缓存失效 (Invalidation): 如果您更新了源站的内容,但在缓存过期之前希望用户立即看到新内容,可以执行缓存失效操作。这会告诉边缘站点标记缓存内容为无效,下次请求时必须回源获取最新版本。滥用失效操作会产生额外费用,且会增加源站负载,应谨慎使用。

工作流程概览:

  1. 用户通过浏览器或其他客户端发起对 CloudFront 分发域名的请求(例如 d1234.cloudfront.net/images/logo.png)。
  2. DNS 将该域名解析到离用户最近的 CloudFront 边缘站点的 IP 地址。
  3. 用户向该边缘站点发送请求。
  4. 边缘站点接收请求后,查找与其缓存行为匹配的规则,并根据缓存策略检查本地是否有缓存。
  5. 缓存命中 (Cache Hit): 如果缓存有效且存在,边缘站点直接将缓存的内容返回给用户。响应头通常会包含 x-cache: Hit from cloudfront
  6. 缓存未命中 (Cache Miss): 如果缓存过期、不存在或规则要求必须回源,边缘站点会根据源站配置和源请求策略向源站发起请求。
  7. 源站接收请求并返回内容给边缘站点。
  8. 边缘站点接收到内容后,根据缓存策略将其存储到本地缓存,并将内容返回给用户。响应头通常会包含 x-cache: Miss from cloudfrontx-cache: RefreshHit from cloudfront
  9. 对于后续相同内容的请求(在缓存有效期内),边缘站点将直接从缓存响应。

4. 创建一个简单的 CloudFront 分发 (以 S3 静态网站为例)

本节将指导您如何在 AWS 控制台创建一个简单的 CloudFront 分发,以加速托管在 S3 上的静态网站。

前提条件:

  • 一个 AWS 账户。
  • 一个配置好静态网站托管(或至少包含一些可公开访问文件)的 S3 存储桶。例如,您可以创建一个名为 my-static-website-example-bucket 的存储桶,上传一个 index.html 文件,并开启静态网站托管(或者使用 OAC/OAI )。为了安全起见,推荐使用 OAC。

步骤:

  1. 登录 AWS 控制台,搜索并进入 CloudFront 服务页面。
  2. 在 CloudFront 控制台主页,点击 “Create Distribution” (创建分发)。
  3. Select Origin (选择源站):

    • Origin domain: 点击输入框,AWS 会自动显示您账户中的 S3 存储桶和 Elastic Load Balancer 等资源。选择您要作为源站的 S3 存储桶,例如 my-static-website-example-bucket.s3.amazonaws.com
    • Name: CloudFront 会自动填充一个唯一的名称,您可以接受或修改。
    • S3 access: 这里推荐选择 “Yes, use OAC (recommended)”
      • 如果选择 OAC,您可以点击 “Create new OAC” (创建新的 OAC)。在弹出的窗口中,可以接受默认设置,点击 “Create”。创建成功后,CloudFront 会提示您更新 S3 存储桶策略,以便 OAC 具有访问权限。点击 “Copy policy” (复制策略)。
      • 切换到 S3 控制台,找到您的源存储桶,进入 “Permissions” (权限) 标签页,编辑 “Bucket policy” (存储桶策略)。将刚刚复制的策略粘贴进去并保存。这个策略允许 OAC 读取存储桶中的对象。
      • 重要: 如果您之前为了静态网站托管将存储桶设置为完全公开访问,为了安全,现在应该移除公共访问权限(将 “Block Public Access” 设置全部启用),因为 CloudFront 将通过 OAC 安全地访问您的内容。
    • (替代方案:如果您使用了 S3 静态网站托管端点作为源,Origin domain 应该填写静态网站托管的Endpoint,例如 my-static-website-example-bucket.s3-website-us-east-1.amazonaws.com。此时 S3 access 通常选择 “No (CloudFront will not manage S3 permissions)”,并确保 S3 存储桶是公开可访问的。但请注意这种方式安全性较低,不推荐用于生产环境。)
  4. Default cache behavior (默认缓存行为):

    • Viewer protocol policy:
      • HTTP and HTTPS: 允许用户通过 HTTP 或 HTTPS 访问。不推荐,因为不够安全。
      • Redirect HTTP to HTTPS: 强制所有 HTTP 请求重定向到 HTTPS。推荐此选项,既保证安全又方便用户。
      • HTTPS Only: 只允许 HTTPS 请求。如果您的应用只支持 HTTPS,可以选择此项。
      • 我们选择 “Redirect HTTP to HTTPS”
    • Allowed HTTP methods: 通常选择 “GET, HEAD” 即可,因为 CDN 主要用于分发内容。如果您的应用需要 PUT/POST/DELETE 等方法回源,则需要选择更多选项。
    • Cache key and origin requests: 这里决定了 CloudFront 如何生成缓存键以及哪些信息转发到源站。推荐使用 “Use a cache policy and origin request policy (recommended)”
      • Cache policy: 选择一个合适的缓存策略。对于静态网站,可以选择 “Managed-CachingOptimized”,这是一个 AWS 管理的策略,通常适用于静态内容。它会根据源站的 Cache-Control 头进行缓存,同时也设置了默认的 TTL。您也可以创建自定义策略以更精细地控制缓存时间、是否包含查询参数等。
      • Origin request policy: 选择一个源请求策略。通常选择 “Managed-AllViewerExceptHostHeader” 或类似的策略,它会将除 Host 头之外的用户请求头转发到源站。
    • Smooth streaming / HLS / DASH: 如果您分发流媒体,需要启用相应的选项。对于静态网站,保持禁用。
    • Restrict viewer access: 如果您需要限制访问(例如付费内容),可以在这里启用签名 URL 或签名 Cookies。对于公开静态网站,保持禁用。
    • Enable real-time logs: 可以选择启用实时日志,但会产生额外费用。初学者可以保持禁用。
    • Response headers policy: 可以选择或创建策略来修改 CloudFront 返回给用户的响应头,例如添加安全相关的头(如 Strict-Transport-Security)。初学者可以先不设置。
  5. Distribution settings (分发设置):

    • Price class: 选择适合您的用户分布和预算的价格类。
      • Use only US, Canada, and Europe: 成本最低,覆盖范围最小。
      • Use US, Canada, Europe, Asia, Middle East, and Africa: 覆盖大部分常用区域。
      • Use All Edge Locations (Best Performance): 成本最高,覆盖范围最广,性能最优。
      • 根据您的目标用户选择,通常选择中间或全部以获得较好的性能。
    • Alternate domain names (CNAMEs): 如果您希望使用自己的域名(例如 cdn.yourwebsite.com)访问 CloudFront 分发,而不是默认的 d1234.cloudfront.net 域名,在这里输入您的自定义域名。输入后,您需要在您的 DNS 服务商处为这个自定义域名创建一个 CNAME 记录,指向您的 CloudFront 分发域名。
    • Custom SSL certificate: 如果您使用了自定义域名,并且希望通过 HTTPS 访问,需要在这里选择一个 SSL/TLS 证书。推荐使用 Amazon Certificate Manager (ACM) 提供的免费证书。如果您还没有为您的自定义域名申请证书,可以去 ACM 服务申请并验证域名所有权。
    • Default root object: 当用户访问分发根目录(例如 https://cdn.yourwebsite.com/)时,CloudFront 返回的默认文件。对于静态网站,通常是 index.html
    • WAF Web ACL: 如果您使用了 AWS WAF,可以在这里关联一个 Web ACL 来保护您的分发。
    • Enable IPv6: 默认启用,推荐保持启用。
    • Standard logging: 可以选择启用标准访问日志,并指定一个 S3 存储桶来存放日志文件。会产生 S3 存储和请求费用。
    • Description: 为您的分发添加描述,方便管理。
  6. 点击 “Create distribution” (创建分发)。

  7. 等待部署: CloudFront 需要一些时间(通常 10-20 分钟,有时可能更长)来在全球的边缘站点部署您的分发配置。在分发列表页面,您会看到新创建的分发状态为 “Deploying” (正在部署)。请耐心等待,直到状态变为 “Deployed” (已部署)。

  8. 测试访问: 一旦分发状态变为 “Deployed”,您就可以使用 CloudFront 分发提供的 Domain name (域名) 来访问您的内容了(例如 https://d1234.cloudfront.net/index.htmlhttps://d1234.cloudfront.net/ 如果设置了默认根对象)。如果您配置了自定义域名和 CNAME 记录,也可以通过您的自定义域名访问。

5. CloudFront 高级特性概述

除了基本的缓存分发,CloudFront 还提供了许多高级特性,可以满足更复杂的应用场景:

  • 多个源站和路径行为: 一个分发可以配置多个源站,并通过不同的缓存行为将不同路径的请求路由到不同的源站(例如 /images/* 到 S3,/api/* 到 EC2 后端的 API Gateway)。
  • Origin Shield: 在区域边缘缓存和您的源站之间增加一个额外的缓存层。它可以作为您源站唯一的入口点,进一步降低源站负载并提高缓存命中率,尤其适用于有多个区域边缘缓存回源的场景。
  • AWS WAF 集成: 提供强大的 Web 应用程序防火墙能力,抵御常见的 Web 攻击。
  • Lambda@Edge 和 CloudFront Functions: 允许您在 CloudFront 边缘站点执行自定义代码,以在请求到达源站或响应返回用户之前/之后修改请求或响应。例如,可以用于执行 A/B 测试、自定义身份验证、动态路由、修改头信息等。Lambda@Edge 功能更强大但延迟稍高,CloudFront Functions 性能更高且延迟极低但功能相对简单(只支持少量 JavaScript)。
  • 签名 URL 和签名 Cookies: 控制对付费内容或私有内容的访问,只有携带有效签名信息的用户才能访问。
  • 实时日志和监控: 提供详细的访问日志以及与 Amazon CloudWatch 集成的监控指标,帮助您了解流量模式、缓存命中率、错误率等。
  • 字段级加密: 允许您上传敏感信息(如信用卡号)时进行端到端加密,只有特定的后端服务器才能解密。

6. CloudFront 定价模型

CloudFront 的定价主要基于以下几个因素:

  • 数据传出到互联网 (Data Transfer Out to Internet): 这是主要的费用来源,根据数据从 CloudFront 边缘站点传输到最终用户的总量计费,费用因地理区域不同而异(通常流量越大的区域单价越低)。
  • HTTP/HTTPS 请求数量: 根据边缘站点响应的 HTTP 和 HTTPS 请求总数计费,通常按每 10,000 个请求计费。HTTPS 请求通常比 HTTP 请求的单价略高。
  • 失效请求 (Invalidation Requests): 每个分发每月有一定数量的免费失效路径,超出免费额度后按每条失效路径计费。
  • 字段级加密请求 (Field-Level Encryption Requests): 如果使用此功能,会产生额外费用。

AWS Free Tier 为新用户或现有用户提供一定的 CloudFront 免费额度,通常包括:

  • 每月 1 TB 数据传出到互联网。
  • 每月 1000 万个 HTTP 或 HTTPS 请求。
  • 每月 200 万个 CloudFront Functions 调用。

具体和最新的定价信息请务必查阅 AWS 官方 CloudFront 定价页面。

7. 使用 CloudFront 的最佳实践

  • 优化缓存策略: 合理设置缓存时间 (TTL)。对于不经常变化的静态资源(图片、CSS、JS 文件),可以设置较长的 TTL。对于需要频繁更新的内容,设置较短的 TTL 或考虑使用版本号(文件名包含内容的 hash 值)来避免频繁失效。
  • 使用 Gzip 或 Brotli 压缩: 在源站或 CloudFront 中启用压缩,可以减小文件大小,加快传输速度,降低数据传出成本。CloudFront 默认支持并将压缩内容返回给支持压缩的浏览器。
  • 强制使用 HTTPS: 通过 CloudFront 设置强制重定向 HTTP 到 HTTPS,提供安全的连接,增强用户信任,并且有利于 SEO。
  • 尽量避免频繁失效: 频繁的失效操作会增加成本并回源请求,影响性能。考虑使用文件版本号(例如 style.css?v=1.0.1style.123abc.css)来更新内容,而不是失效整个路径。
  • 监控和日志分析: 利用 CloudWatch 监控 CloudFront 的关键指标(如请求数、错误率、缓存命中率)和访问日志,了解流量模式和性能瓶颈。
  • 利用缓存行为细粒度控制: 根据不同的内容类型或路径设置不同的缓存行为和策略,以最大化缓存效率和满足特定需求。
  • 使用 OAC/OAI 保护 S3 源站: 如果 S3 是您的源站,务必使用 OAC 或 OAI 来限制 CloudFront 对 S3 的访问,避免将 S3 存储桶设置为公开可访问。

8. 总结

AWS CloudFront 是一项功能强大且高度可扩展的全球内容分发网络服务。通过将您的内容缓存到全球各地的边缘站点,CloudFront 能够显著提升您的网站或应用程序的访问速度、可用性和安全性,同时帮助您优化成本并减轻源站压力。

本文为您提供了初识 CloudFront 所需的核心概念、工作原理以及一个简单的入门实践。CDN 是现代 Web 架构中不可或缺的一部分,掌握 CloudFront 的使用将极大地提升您的应用性能和用户体验。

接下来,您可以尝试为您的实际项目配置 CloudFront 分发,探索更多高级特性,并结合监控和日志分析来优化您的内容分发策略。CloudFront 的世界远不止于此,随着您对服务的深入了解,您将能够构建更加高效、安全和可靠的全球内容分发解决方案。


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部