亚马逊CloudFront免费CDN配置教程
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回源亦或者是匹配访问。
接下来是去设置默认的缓存行为,其中第一条是访问设置 Viewer 。 Viewer protocol policy 根据你对外访问需要决定是否将HTTP跳转到HTTPS; Allowed HTTP methods 为允许的请求头,可以根据实际需要选择,简单概括文件下载场景可选第一条、静态网站可选第二条、动态网站必须选择第三条,如果无法明确判定自己需要直接选择第三条全部支持即可。
第二条是缓存设置和源请求设置 Cache key and origin requests ,作为默认规则建议分别选择 CachingDisabled 禁止缓存以及 AllViewer 将所有访客请求头转发到源站。
其他未提到的项目暂时保持默认(各个自定义名称的条目除外,看你要不要自己命名),然后拉到最下面点击 Create distribution 创建CDN资源。
这时候一个CDN资源就成功创建出来了,稍后你可在面板上看到为你分配的 *.cloudfront.net 默认域名,这也是你后续添加自定义域名所要指向的 CNAME 值。
规则配置
进入CDN控制面板,第一个页面便是资源概览的 General 选项卡,在下方 Settings 栏右侧点击 Edit 可以进入资源的基础配置。前两项价格层级和WAF如其名,建议都保持默认(全部节点、无防护),关于WAF的内容放到第三节再单独解释。
接下来就是比较重要的绑定自己的域名,在 Alternate domain name 可以添加一个或多个自己的域名到这个资源,随后可以前往DNS将自定义域名通过CNAME指向前文提到的CloudFront默认域名。
随后同样是比较重要的HTTPS配置,我们先要前往 us-east-1 可用区的ACM( 点击前往 )导入自己的证书或者签发Amazon的免费证书,注意这里必须是Virginia区域的ACM否则CloudFront将无法读取到你的证书。点击 Import 导入自己证书, Requst 签发免费证书。
准备好证书后回到我们的CDN设置页面,在 Custom SSL certificate 选项卡下选择你刚刚签发的证书,安全策略建议选择 TLSv1.1_2016 以获得较为广泛的兼容性。
最后是IPv6选项,面向的访客位于中国大陆时建议关掉,面向海外的话可以保持默认的开启状态。其他未提及的选项保持默认即可,至此CDN资源配置完成。
随后第二个选项卡即为源站设置,包括源站设置和包含主备切换功能的源站组设置。
在这里可以添加多个源站,如图在右上角点击 Create origin 可以创建新的源站。
和之前的新建流程一样, Origin domain 填入一个解析到你源站的域名,可以利用 nip.io 项目在IP末尾添加 .nip.io 解析到源站IP, Protcol 取源协议根据你的具体需求选择HTTP/HTTPS回源亦或者是匹配访问。此处需要注意若以HTTPS方式回源,源站必须配置有效、可信任的证书,否则节点取源会返回502错误。
源站组则可以将两个配置好的源站配置载入其中,一个作为主源站另一个作为热备源站,在源站请求出现如图错误参数时实现主备切换,若不需要这样的功能忽略这一步即可。
接下来就是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 页面移动规则上下指定其优先级(靠上者优先级更高)。