【AWS】CloudFront免费CDN详细配置入门

发布于 / 信息应用 / 34 条评论

一转眼几个月没发文章了,考研的几个月里也不是很想动笔就一直咕咕咕了。话说回来,在2021年的11月,亚马逊AWS对他的Always Free策略做出了一些改变,这篇文章主要介绍如何利用其中的CloudFront资源,一起来看看吧~


零、序言

CloudFront是AWS推出的CDN功能,依托于AWS的全球基础设施,拥有海量的节点和带宽资源,过去一直以高昂的价格令个人站长望而却步。很多服务商如腾讯云QUIC.CLOUD等,其全球布局都是租赁的CloudFront的边缘节点。

2021年对于云计算行业也是个不太平静的一年,经历了CloudFlare怒怼AWS流量暴利和AWS彻底砍掉自家Educate优惠码之后,AWS对自家免费产品额度做出了一些改变。

CloudFront 提升前 提升后
流量 50G/月 · 免费一年  1T/月 · 永久免费
请求次数 200万/月 · 免费一年  1000万/月 · 永久免费

除此之外,EC2的免费流量额度也从之前的免费一年15G或各区域1G提升到了永久每月100G,这么看起来新用户的免费EC2实例也不是那么的鸡肋了。经过博主测试,以上的免费额度已经在12月生效,可以放心使用。在配置过程中,AWS机翻的控制台与英文文档间理解存在诸多不便,因此全文以英文控制台为例进行演示。

注意:本文为仅针对一般用途的非专业实践,并未完全利用CloudFront所具备的全部功能,更合理的高级功能应用请结合官方文档及个人实践探索,欢迎在评论区分享你的实践经验~

参考资料来源

AWS Blogs:点击前往
CloudFront Developer Guide:点击前往


一、创建资源

开始使用CloudFront,来到CloudFront的控制台(点击前往),要做的第一件事就是点击Create distribution通过引导新建一个CDN资源。整个引导其实是一个完整的单源站单规则配置流程,不过为了更加清晰的理解部分参数在此保持默认,后文第二节会对这些细节单独详细展开。

首先最开始的是源站配置,第一项Origin domain,只能填入一个解析到你源站的域名。如图如果你不想自己解析的话,可以利用nip.io项目在IP末尾添加.nip.io解析到源站IP。Protcol是取源协议,根据你的具体需求选择HTTP/HTTPS回源亦或者是匹配访问。

接下来是去设置默认的缓存行为,其中第一条是访问设置ViewerViewer protocol policy根据你对外访问需要决定是否将HTTP跳转到HTTPS;Allowed HTTP methods为允许的请求头,可以根据实际需要选择,简单概括文件下载场景可选第一条、静态网站可选第二条、动态网站必须选择第三条,如果无法明确判定自己需要直接选择第三条全部支持即可。

第二条是缓存设置和源请求设置Cache key and origin requests,作为默认规则建议分别选择CachingDisabled禁止缓存以及AllViewer将所有访客请求头转发到源站。

其他未提到的项目暂时保持默认(各个自定义名称的条目除外,看你要不要自己命名),然后拉到最下面点击Create distribution创建CDN资源。

这时候一个CDN资源就成功创建出来了,稍后你可在面板上看到为你分配的*.cloudfront.net默认域名,这也是你后续添加自定义域名所要指向的CNAME值。


二、规则配置

2.1 资源基础配置(General)

进入CDN控制面板,第一个页面便是资源概览的General选项卡,在下方Settings栏右侧点击Edit可以进入资源的基础配置。前两项价格层级和WAF如其名,建议都保持默认(全部节点、无防护),关于WAF的内容放到第三节再单独解释。

接下来就是比较重要的绑定自己的域名,在Alternate domain name可以添加一个或多个自己的域名到这个资源,随后可以前往DNS将自定义域名通过CNAME指向前文提到的CloudFront默认域名。

随后同样是比较重要的HTTPS配置,我们先要前往us-east-1可用区的ACM(点击前往)导入自己的证书或者签发Amazon的免费证书,注意这里必须是Virginia区域的ACM否则CloudFront将无法读取到你的证书。点击Import导入自己证书,Requst签发免费证书。

这里推荐签发Amazon的证书,有效期395天且支持泛域名。如图填入自己的域名,选择合适的验证方式添加对应的记录即可,验证完成后很快就能够签发成功。

准备好证书后回到我们的CDN设置页面,在Custom SSL certificate选项卡下选择你刚刚签发的证书,安全策略建议选择TLSv1.1_2016以获得较为广泛的兼容性。

最后是IPv6选项,面向的访客位于中国大陆时建议关掉,面向海外的话可以保持默认的开启状态。其他未提及的选项保持默认即可,至此CDN资源配置完成。

2.2 源站配置(Origins)

随后第二个选项卡即为源站设置,包括源站设置和包含主备切换功能的源站组设置。

在这里可以添加多个源站,如图在右上角点击Create origin可以创建新的源站。

和之前的新建流程一样,Origin domain填入一个解析到你源站的域名,可以利用nip.io项目在IP末尾添加.nip.io解析到源站IP,Protcol取源协议根据你的具体需求选择HTTP/HTTPS回源亦或者是匹配访问。此处需要注意若以HTTPS方式回源,源站必须配置有效、可信任的证书,否则节点取源会返回502错误。

源站组则可以将两个配置好的源站配置载入其中,一个作为主源站另一个作为热备源站,在源站请求出现如图错误参数时实现主备切换,若不需要这样的功能忽略这一步即可。

2.3 访问规则及缓存配置(Behaviors)

接下来就是CDN配置中最为关键的一步,设置访问行为Behaviors规则,由此可以实现路径与源站的匹配以及节点缓存功能。

配置Path pattern是本节内容的核心,在一开始创建的引导中我们已将默认路径Default (*)设置为不缓存任何内容,因此针对每一种我们需要缓存的内容都要单独配置缓存规则。

选定我们需要缓存或者排除的内容依赖的是Path pattern(区分大小写),与CloudFlare的页面规则匹配类似,主要是通配符*??的应用,常用的几种见如下表格。随后的设置内容即仅针对匹配的访问路径,首先就是选择2.2中配置的源站或源站组,以此也可实现不同路径的不同来源。

Path pattern 匹配的文件范围
/files/* 指定/files/路径下所有文件
/*.jpg 指定CDN资源内所有jpg后缀文件
/*.css* 指定CDN资源内所有css后缀及包含参数的访问
/files/*.gif 指定/files/路径下所有gif后缀文件
/a??.mp3 指定CDN资源内以a开头的mp3后缀文件

接下来Viewer protocol policy也跟第一步一样根据你对外访问需要决定是否将HTTP跳转到HTTPS;Allowed HTTP methods为允许的请求头,同样根据实际需要选择,无法明确判定自己需要直接选择第三条全部支持即可。

HTTP请求头 适用场景
GET, HEAD 提供文件下载等
GET, HEAD, OPTIONS 纯静态网站或用于引用的静态资源等
GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE WordPress等动态网站

接下来缓存设置Cache key and origin requests,匹配之前选定的路径及文件选择不缓存的CachingDisabled或最优缓存CachingOptimized规则;最后源请求策略依然设置为AllViewer将所有访客请求头转发到源站。其他给出的预置缓存规则均有针对性,也可以自己配置,这些针对性的内容若有需要请参考官方文档进行配置。

至此,通过Path pattern圈定范围并指定缓存规则后,我们可以实现对路径的缓存和对特定后缀文件的缓存。同样的,若缓存多个指定的后缀则需要依次添加多个规则,通过在Behavior页面移动规则上下指定其优先级(靠上者优先级更高)。

看到这里恭喜你,灵活运用以上内容你已经可以使用CloudFront作为CDN绝大多数的使用需求了~


三、其他要点

3.1 CDN计费细则

CloudFront的免费额度是每月1T流量和1000万次请求,计费项目包括HTTP请求、HTTPS请求、节点发往源站流量、节点流出到用户四部分流量,对于流量计费的理解如图所示。

使用CloudFront需要注意自己是否超出免费额度,超出后的价格是很贵的。账单是每天出一次,没有实时统计提供(控制面板的流量统计也有几个小时延迟),因此请不要将其用于易受攻击的站点。

需要注意,博主2022年2月账单更新后Bandwidth中区分出Traffic to Origin上行到源站流量条目,并开始以0.06USD/GB(亚太地区)计费,与文档描述一致回源流量不在免费范围内。请注意站点请求流量开销,AWS提供的免费额度不能完全覆盖正常使用,同时经过测试选用EC2作为源站也是无法避免此项开销的。

3.2 502/503/504错误

初次配置访问出现的错误一般如下:

502 ERROR The request could not be satisfied.

这个时候首先检查CDN域名是否已添加到源站,然后确认前文2.3中源请求策略设置为AllViewer将所有访客请求头转发到源站(主要是HOST未发往源站导致的),最后当使用HTTPS回源时确认源站是否安装了有效的SSL证书。

3.3 WAF/ACL防护

CloudFront提供有WAF防护,在前文未提到的原因是它是付费的而且价格并不便宜,因此并不推荐使用。以设置一条访问速率限制规则为例,你需要每月支付5美金的WAF规则费用以及1美元/条用于限流的ACL规则,此外还有请求次数的费用。

另外也需要补充一句,在没有开启安全规则的时候对CloudFront恶意攻击是非常容易的,请务必注意设置信用卡限额、权衡安全规则,避免使用在易受攻击的场景。下图博主的一个朋友就是被刷了6亿请求数导致产生了800多美金的账单。

3.4 WebSocket支持

CloudFront能够完全支持WebSocket功能,请求次数不会额外收费。

3.5 网络优化配置

曾经在Lightsail CDN的体验中博主有提到关于网络的内容,AWS并未使用Anycast技术且在这段时间并未对网络做出改变,可以参考该文章第【】部分。

【CDN】AWS Lightsail CDN测试(免费一年)

前几天在上管理Lightsail的时候偶然看到上面的广告写了个Lightsail CDN,AWS的一贯机翻没有让人失望,博主在这里愣了一小会才反应过来…… AWS自己家的CDN就 ...
https://luotianyi.vc/4324.html

四、结语

CloudFront作为全球CDN巨头之一,提供的服务质量也是数一数二的,只是作为云服务厂商相比CloudFlare配置流程显得非常不友好。整体而言与CloudFlare各有优劣,如何选择可以自己权衡。

如果你有其他的技巧分享,或这篇文章存在错误的地方,也欢迎在评论区留言。在文章的最后,还是要说一句免费资源来之不易,且用且珍惜啦~


*原创文章,转载请注明出处

转载原创文章请注明,转载自: Luminous' Home » 【AWS】CloudFront免费CDN详细配置入门

  1. Data transfer out to internet: The first 1,024 GB/month are free.

    3.1的示意图和这个说明不一样?

    1. @路人甲 嗯,下面红字有解释,在写这篇文章的时候上行流量也是计入免费额度的,后来修正和文档一致了,以文档为准
  2. 准备专门给海外加速用,注册试了一下,确实挺复杂,腾讯云CDN海外节点用的就是CloudFront的,还付费的。CloudFlare目前不支持cname解析了,想单独给海外用户加速,还挺麻烦。

  3. 这样不是脱裤子放屁吗,免费又不完全免费

    1. @quasi 现在流量贵,给你1T已经是大发慈悲了
  4. 您好,请问“选择AWS服务器作为源站按文档也是无法避免这项开销的”是啥意思呢?即使用aws的ec2做源站也会收费吗?

    1. @xdmmddd 您好,非常期待回复,非常感谢!
      1. @xdmmddd 官方文档关于配合AWS的源说法是“如果您使用 AWS 服务作为内容的源,则从源传输到边缘站点(Amazon CloudFront 来源获取)的数据是免费的”。我的理解是EC2之类的服务流出到CloudFront不计费,而全篇都没有提到从CF发往源站的费用豁免。这个具体应该实际测试去得出结论,博主现在没时间整这个……
        1. @Luminous 嗯嗯我试一试,谢谢
  5. AWS的计费规则和设置好麻烦的样子

    1. @Miko 文档里其实描述的非常清晰,还有一张图片示意。https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CloudFrontPricing.html
  6. 现在到非AWS源站开始计费了,账单显示data traffic to origin

    1. @四女 测试了一下,现在确实收费了
  7. 不是说免费流量改变不包括中国吗?(the expansion doesn’t apply to data transfer from cloud front pops in China)

    1. @laoxiao789 这里的“中国”指的是AWS中国的边缘节点,需要特殊请求的默认不会开启
    2. @laoxiao789 这一点不必担心,AWS不论是北京还是宁夏中卫地区都需要手动注册企业账号才能启用,与国际区域完全隔离,两个区域的cloudfront节点也需要备案才能使用。
  8. 昨天刚启用了cloudfront,移动宽带用着很爽。我看源组里可以设置故障迁移,这功能不会单独再收费吧?

    1. @nic 看了一下官方文档,应该是不会单独收费的
      1. @Luminous 我发现我的账单跟你不太一样?没有出现cloudfront,但出现了simpe storage service,还是要收费的?但我aws上只开启了lightsail和cloudfront。 实在搞不懂aws的收费。s2.loli.net/2022/01/08/QuiFlN6Y45xeHXz.png
        1. @nic Simple Storage Service是你在ACM申请SSL证书产生的,正常使用那一点点请求次数还没达到计费最小标准,不会产生费用。至于CloudFront的账单产生流量后建议再等等,延迟还是挺大的。
          1. @Luminous ER,我没用自己的域名,没在ACM申请ssl证书。
            1. @nic 我上个月账单这一项可以确定是和SSL证书有关系,第一次尝试选成了在新加坡区域创建证书,后面纠正回了弗吉尼亚。除此之外我猜测是读写配置的一些请求数,不过加起来最后也没到计费最低限度。
              1. @Luminous 我1月、2月的账单都没看到cloudfront的栏目,3月的到目前也没有,真奇怪的。
  9. 需要信用卡?

    1. @籽夏 是的,注册AWS需要credit card
  10. 网上搜索了一圈,好像说的是回源到非aws的机器要另外收费,请问博主是这样的吗?
    能详细说说使用中收费项吗?我看了三个小时的文档,只有一个模糊的概念

    1. @wei 被文档困扰的时候实践是找到答案的捷径,通过上传文件测试3.1得出中账单最下方第一行为上行到源站流量,第二行为节点传出流量,二者在账单上显示均属于Free Tier范畴,可以放心使用~
      1. @Luminous 好的,谢谢,看到你的文章刚折腾,AWS还没更新账单,等更新账单后再仔细查看。非常感谢
      2. @Luminous 为啥我 outbound traffic to origin 收费了啊,单价写的是 $0.06,很价格表里的一样
  11. AWS改的这波好大方!1T一月够干好多事了

    1. @eggry 是的,但是AWS缺点还是很怕被攻击,我都没敢把自己演示站放出来……
  12. 图片真好看~是自己画的吗

    1. @飞飞 感谢喜欢,插画是VSINGER官方的图~
  13. mjj还有三秒到达战场,羊要被薅秃了!