1. 什么是 Amazon CloudFront ?

Amazon CloudFront 是 AWS 的 CDN,是一个用于加快将静态和动态的 Web 内容(如: .html, css, .js, 图片文件)分发给用户的Web 服务。举个简单的例子来说明。比如你在中国,想请求一张 Web 服务器位于美国的图片,在检索到图片之前,这个请求会从一个网络路由到另一个网络,在经历 n 多个路由后,才能到达该图片所在的服务器,这是一个非常大的跳数,同时会对性能、可用性和可靠性产生很大影响。但是如果将原始服务器与 CloudFront 关联(关联后 CloudFront 知道从哪些原始服务器获取资源),这时不再通过原始服务器访问图片,而是通过 CloudFront 分配的 URL 访问图片,则该请求将被路由到迟延最短的 CloudFront 边缘站点。如果该内容在迟延最短的 CloudFront 边缘站点的缓存中存在,则将直接从该边缘站点的缓存中返回图片。如果请求的内容不在该边缘站点的缓存中,才从源去取(请求的内容不在缓存中,这里写的比较笼统,这种情况下 CloudFront 是如何工作的,详细工作流程,见下面 Note 的解释)。这样大大减少了路由数,从而提高了性能。


Note:如果请求的内容不在迟延最短的边缘站点的缓存中,CloudFront 的处理如下:

① CloudFront 将比较该请求与分配中的说明,然后根据对应的文件类型将文件请求转发到适用的源服务器。例如,对于图像文件,转发到 Amazon S3 存储桶;对于 HTML 文件,转发到 HTTP 服务器。

② 原始服务器将这些文件发回 CloudFront 边缘站点。

③ 当从源返回的第一个字节到达 CloudFront 时,CloudFront 就开始将这些文件转发给用户,同时将这些文件添加到边缘站点的缓存中,方便有人再次请求这些文件。

2. 配置原始服务器(以 AWS S3 为例)

1. 登录AWS S3 控制台,点击 “Create bucket” 。

AWS CloudFront 介绍及配置_CloudFront

2. 创建 bucket。在 “Create bucket” 对话框中,输入 “Bucket name” 和 “Region”  ,一直点 “Next” ,直至创建成功。

3. 上传文件至 S3。选择刚刚创建成功的 bucket,点击 “Upload” ->  “Add Files” ,一直点 “Next” ,直至上传成功。

AWS CloudFront 介绍及配置_S3_02

4. 文件设为公开。设置成功后点击下面的 Link Url 验证是否可以访问。也可以指定哪些人可访问。

AWS CloudFront 介绍及配置_S3_03

3. 创建 CloudFront Distribution。

Distribution 将告诉 CloudFront 从哪些原始服务器获取您请求的文件。

1. 登录 CloudFront 控制台。

2. 选择 “Create Distribution”。

3. 在 “Web” 区域,选择 “Get Started”。

AWS CloudFront 介绍及配置_Cache_04

4. 设置 “Origin Settings”。在 “Origin Domain Name”中,选择之前创建的S3 bucket, 选择完成后,“Origin ID” 会自动填充。“Origin Path”,“Restrict Bucket Access”,“Origin Custom Headers” 接受默认值即可。

AWS CloudFront 介绍及配置_Cache_05

5. 设置 “Default Cache Behavior Settings”。

AWS CloudFront 介绍及配置_CDN_06

6. 设置 “Distrubution Settings”。

AWS CloudFront 介绍及配置_S3_07

8. 完成创建。在所有这些都设置完后,点击“Create Distribution” 按钮。

9. 新域名访问。

在 CloudFront 创建完 Distribution 之后,你的 Distribution 的 “Status” 这一栏将会从 “InProgress” 变为 “Deployed” (该过程大约需要 15 分钟,因为需要将 Distributin 的配置发送到其所有的边缘站点)。在确定状态变为 “Deployed” 之后,就可以通过 CloudFront 分配的域名去访问源上的文件了。如:CloudFront 分配的域名为d111111abcdef8.cloudfront.net,AWS S3 上的图片为picture.png,就可以通过http://d111111abcdef8.cloudfront.net/picture.png 访问到图片。


参考文档:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html