CloudFront 是 Amazon 的 CDN 产品,作用首先是分发内容到各个节点,加快网站访问速度。此外 CloudFront 还能很方便地添加 SSL 证书,为你的网站启用 HTTPS。

Google 在不断的推动网站启用 HTTPS,比如 Chrome 浏览器会直接标示 HTTP 网页为不安全,启用 HTTPS 的网站根据搜索引擎算法排名也会更高,在这个大背景下 CloudFront 对 HTTPS 的支持正满足需要。

之前使用 S3 托管了静态网站,本文会叙述怎样使用 CloudFront CDN 为这个 S3 源站点设置分发。对于自定义源操作应该类似,不赘述。

SSL 证书

因为要为网站启用 HTTPS,我们首先为网站域名设置 SSL 证书。

进入 CloudFront 控制台,列表上会显示你已经创建的 Distribution,点击 Create Distribution

我们是要为网站创建 Distribution,点击上方的 Get Started

Create Distribution 详情界面找到 Distribution Settings 部分,把 SSL Certificate 设为 Custom SSL Certificate ,点击 Request or Import a Certificate with ACM

确保 AWS 的 Region 为 US East (N. Virginia) ,在新打开的窗口里填入你的域名(子域名也可以),下一步。

如果为域名设置了邮箱的话,邮件验证很方便。点击 Review ,下个界面内容确认无误后点击 Confirm and request 。CloudFront 会向几个常见的域名管理员邮箱发送确认邮件,点击邮件中的确认链接 SSL 的设置就算完成。

最后回到 Create Distribution 详情界面,刷新之后 Distribution Settings 部分 Request or Import a Certificate with ACM 按钮上方的空白输入框应该已经可以选择刚刚设置好 SSL 的域名。

设置

Create Distribution 详情界面参照以下内容设置,创建分发,然后等待 15~30 分钟内容被分发到各个节点。

Origin Settings

Origin Domain Name:填入 S3 bucket 的 Endpoint URL

Default Cache Behavior Settings

Viewer Protocol Policy:选择 Redirect HTTP to HTTPS

Compress Objects Automatically:选择 Yes

Distribution Settings

Alternate Domain Names (CNAMEs):S3 bucket 绑定的域名(可以是子域名)

SSL Certificate:选择 Custom SSL Certificate (example.com) ,具体设置参考上一节 SSL 证书

Default Root Objectindex.html

域名

在 CloudFront 控制台列表的 Domain Name 一栏,你创建的分发会被分配一个格式为 xxxxxxxxxx.cloudfront.net 的 URL,你可以用这个域名直接访问你分发的内容。

另外也不要忘记设置你的域名( Alternate Domain Names (CNAMEs) 一栏填写的域名),添加一条 CNAME 记录指向这个自动分配的 URL。

后记

设置完成后等待片刻,分发的状态变成了 Deployed ,但怎样确认访问网站实际访问的是 CDN 节点,以及具体访问哪个 CDN 节点呢?不清楚。网站的内容修改后重新发布,但打开网站显示的还是旧的内容,原来是要等待缓存刷新,怎样设置缓存的过期时间比较合理?怎样使缓存强制过期呢?这些都需要从原理开始好好学一下。

那么一个访问量小、读者来源单一的博客真的需要 CDN 吗?这是否是一个伪需求?不需要。是伪需求。

没什么人读的博客不需要分发到全球节点,S3 托管的静态网站访问速度也已经够快,我更希望网站内容发布后能够立刻所见即所得,所以最终我又停用了 CloudFront。

那又为什么一开始要去尝试呢?Because I can. 不折腾一把怎么知道好不好玩、合不合用、喜不喜欢呢。何况技不压身,自己暂时是用不上,难保以后有其它用得着的场合。

以上