AWS企业实战之CloudFront的配置
对于本⽂,开始并不打算写出来,因为aws有⾮常详细的官⽅⽂档,但是对于我本⼈在使⽤过程中的体会来说,官⽹⽂档并不好理解和阅读,英⽂难啃,⽽中⽂翻译往往⼜不是完全正确,往往给学习带来误解,有甄别能⼒的童鞋或许会提个case或者电话咨询⼀下aws的⼯程师,⽽⼤部分⼈估计没有这个甄别能⼒,因此,便有了写此⽂的动⼒,抛砖引⽟,把理解写出来,希望对他们有些帮助;
注:本⽂省略了在dns解析服务商配置cname记录的步骤,因为各个DNS解析服务商的配置有些差异,这点估计难不倒⼤家
1、背景需求
Cdn的发明者是akamai,且到⽬前为⽌,其仍然是它的主营业务,跨国企业/外贸企业/电商企业对于CDN的⾸选⾃然是akamai,不例外,我们公司也是使⽤的akamai的产品,其效果也相当的不错,售后⾮常专业;不过,本⽂今天要说的是cloudFront,除了成本的考虑,或许并没有其他理由去选择CloudFront,所以,本⽂纯技术⽽谈,
2、 Akamai和cloudfront⽐较
Akamai似乎并没有太多说的,功能多⽽⼴,全球覆盖率⼴,性能优越,更优的是有专门的售后技术负责
⽀持,唯⼀的缺点可能是价格稍贵;
CloudFront使⽤范围过于局限,仅仅使⽤于ELB和S3;其重⼼⼯作是在于缓存,因⽽其功能稍显不⾜,具体的功能往往都是需要源站配合来实现;收费成本不⾼,但是隐性收费项⽬⽐较多,出于成本的考虑的话,估计需要再三衡量是否能节约成本;售后服务上,并没有专门的技术提供⽀持,当然可以购买⽀持服务,但通常⼀般企业⽤不着;
注:更多的情况,⾸推akamai;成本考虑的话,可以考虑CloudFront,单纯使⽤cdn,不要使⽤其route53,因为route53是需要额外收取请求费⽤的,另外对缓存清理要求较⾼的,也不建议使⽤,因为其只有1000次免费额度,超出部分,都是需要收取额外费⽤的;最重要的是,公司必须要有⼀定的技术实⼒,才可以驾驭它;
3、 CloudFront配置流程
Create Distribution---Origin Settings---Create behavior---Create Invalidation
中⽂翻译:创建分布—源站设置—创建⾏为—创建⽆效(即清理缓存)
4、 Create Distribution
输⼊账号和密码,登陆aws 控制台,点击 CloudFront;
点击 create Distribution,
这⾥选择的转发⽅式为web,讨论的也是⽹站的CDN加速,对流媒体暂不讨论;
看到如上界⾯,这个界⾯总共会设计到三个部分的设置:
第⼀,源站设置,主要是指定ELB或者S3地址;
第⼆,默认缓存⾏为设置,即默认缓存策略;
第三,分发设置;
但是在这⾥,不做具体配置,看下图:
设置好origin Domain Name,其他保持默认,最后点击 create Distribution;
状态显⽰为In Progress,预计等待15分钟左右….
5、 Distribution Settings
完成以上动作,初步完成了分发的创建,继续往下看:
这个是刚刚创建的,点击,进去:
点 edit;-------------上图中的Domain Name: dsnsbl39shfl3.cloudfront ,便是cname配置所指向的⽬标地址
Price class: Use All Edge Locations(Best Performance)推荐使⽤默认值,也可以根据实际情况选择区域;
AWS WAF Web ACL: WAF是web 应⽤防⽕墙,没有使⽤,保持默认none;
Alternate Domain Names: 配置⾃定义的域名,⽐如,也就是配置你⾃⼰的域名;
SSL Certificate:这个简单,选择安全证书,如果没有,可以先把证书导⼊到ACM;
这个页⾯没有太多的说明,其他都保持默认即可;
6、 Origin Settings
这个页⾯,也没有太多需要说明,红⾊⽅框的部分注意填写即可,下⾯⽅框如果需要⽀持Http/https,请选择match viewer;
7、 Create behavior
本⼩节是整个CDN配置的关键和难点,需要认真理会后续逻辑
1 Path Pattern:路径模式,指定您希望此缓存⾏为所匹配的请求。CloudFront收到⽤户请求时,会按照缓存⾏为在分配中的顺序和路径模式与请求路径进⾏匹配,⽽决定缓存如何;
匹配原则:
A) 通常第⼀个匹配,就决定了此请求的缓存⾏为;
B) 指定的路径模式适⽤于指定⽬录以及该⽬录下所有⼦⽬录中所有⽂件的请求,⽐如p_w_picpaths⽬录下包括product1和product2⼦⽬录,路径模式:p_w_picpaths/*.jpg,可以匹配p_w_picpaths,p_w_picpaths/product1和p_w_picpaths/product2⽬录下的所有jpg⽂件;
C) 其⽀持通配符*和?,
* matches 0 or more characters 匹配0个或者多个字符,即匹配任意多个字符;
matches exactly 1 character 匹配单个字符,
2 Viewer Protocol Policy 关注第⼆项配置,Redirect Http to Https 80端⼝重定向到443;
3 Cache Based on Selected Request Headers
指定是否需要转发请求的头部回源站,并根据头部信息进⾏缓存;
ALL 转发所有的头部回源站,但是CloudFront不会缓存任何信息,⽽是全部回源站;
Whitelist 仅仅转发指定的头部回源站,并缓存;
None CloudFront仅转发默认头部信息回源站,但是它不缓存对象基于头部信息
举例:
⼿机跳转功能
增加Http头cloudFront-Is-Mobile-Viewer(cloudfront默认已经创建),并转发回源站,然后配置源站nginx,对头部信息进⾏判断,再实现跳转
Cloudfront关注的重点是数据缓存,⾄于某些功能上的实现,必须在源站来协助实现,因此配置源站nginx如下:
location / {
index index.html index.htm;
}
if ($http_cloudFront_is_mobile_viewer = true) {
set $mobile_request true;
}
if ($mobile_request = true) {
break;
}
if ($http_cloudFront_is_Tablet_viewer = true) {
set $Tablet_request true;
}
if ($Tablet_request = true) {
break;
}
}
5 Object Caching
如果源站增加了cache-control头,对对象设置了保存时长,并且不想改变cache-control所控制的时长,请选择 Use Origin Cache Headers;否则请选择customize.
6 Minimum TTL/Maximum TTL/Default TTL
这部分是控制缓存时长的重点,其匹配逻辑如下:
Origin Configuration Minimum TTL = 0 Seconds Minimum TTL > 0 Seconds
增加 cache-control max-age Cloudfront 缓存
取 cache-control max-age 和 Maximum
TTL 两者最⼩值
Browser caching
浏览器缓存时间为cache-control max-age
Cloudfront caching
与max age/ Minimum TTL/Maximum TTL 三者
有关:
1. Minimum TTL< max-age < maximum TTL
缓存时间:control-control max age
2. max-age < minimum TTL
缓存时间:minimum TTL
3. max-age >maximum TTL
缓存时间:maximum TTL
Browser caching:
缓存时间为:control-control max age
不增加cache-control max age CloudFront caching:
缓存时间:Default TTL
Browser caching:
依赖于浏览器缓存策略
Cloudfront caching:
缓存时间:
Minimum TTL与Default TTL最⼤值;
Browser caching:
依赖于浏览器缓存策略
增加cache-control max-age和cache-control s-maxage CloudFront caching:
缓存时间:
Cache-control s-maxage和Maximum TTL
之间最⼩值
Browser caching
缓存时间:cache-control max-age
Cloudfront caching
Minimum TTL/Maximum TTL/s-maxage取决于
这三者
1. MinimumTTL< s-maxage < maximum TTL
缓存时间:s-maxage
2. s-maxage < minimum TTL
缓存时间:
minimum TTL
3. s-maxage > maximum TTL
缓存时间:
maximum TTL
Browser caching
缓存时间:
Cache-Control max-age
增加expires Cloudfront caching
缓存时间
Expires和maximum TTL 取最早者
Browser caching
缓存时间:Expires
CloudFront caching
取决于minimum TTL and maximum TTL and
the Expires三者
1. Minimum TTL < Expires < maximum TTL
缓存时间:expires
2. Expires < minimum TTL
缓存时间:minimum TTL
3. Expires > maximum TTL
缓存时间:maximum TTL
Browser caching
缓存时间:expires
加Cache-Control: no-cache, no-store, and/or private CloudFront and browsers respect the
headers
Cloudfront caching
缓存时间:minimum TTL
Browser caching
respect the headers
7 Query String Forwarding and Caching
CloudFront可以根据字符串缓存不同版本的数据,
None (Improves Caching) 如果⽆论字符串如何,都返回相同版本的对象,请选择此项;
Forward all, cache based on whitelist 如果源服务器根据⼀个或多个查询字符串参数返回对象的不同版本,请选择此项;
Query String Whitelist 只⽀持健,并不⽀持值,⽐如可以在⽅框中输⼊language,但是并不能⽀持language=de或者language=en,这点跟akamai区别明显要不同;⽐如如下链接:
这代表两个不同的链接,会进⾏缓存;但是在Query String Whitelist中,输⼊language即可;
Forward all, cache based on all 如果原始服务器的所有查⾎字符串参数返回不同版本的对象,请选择此项;
8 Compress Objects Automatically
如果你想⾃动压缩某些类型的⽂件,当viewer请求的头部信息中包含Accept-Encoding: gzip的时候,请选择yes,也就是说需要压缩的⽂件请求,必须含有Accept-Encoding: gzip头部信息;
如果您配置CloudFront来压缩您的内容,CloudFront将压缩在Content-Type头⽂件中具有以下值的⽂件(即只能压缩以下内容类型的头⽂件):
application/eot
application/x-otf
application/font
application/x-perl
application/font-sfnt
application/x-ttf
application/javascript
font/eot
application/json
font/ttf
application/opentype
font/otf
application/otf
font/opentype
application/pkcs7-mime
p_w_picpath/svg+xml
application/truetype
text/css
application/ttf
text/csv
application/vnd.ms-fontobject
注册公司的流程
text/html
application/xhtml+xml
text/javascript
application/xml
text/js
application/xml+rss
text/plain
application/x-font-opentype
text/richtext
application/x-font-truetype
text/tab-separated-values
application/x-font-ttf
text/xml
application/x-httpd-cgi
text/x-script
application/x-javascript
text/x-component
application/x-mpegurl
text/x-java-source
application/x-opentype
如果要压缩CloudFront不⽀持压缩的⽂件类型,可以使⽤gzip将⾃定义源配置为压缩这些类型的⽂件。 CloudFront不⽀持其他压缩算法。当您的起始点将压缩⽂件返回到CloudFront时,它将包含⼀个Content-Encoding:gzip标头,它向CloudFront指⽰该⽂件已经被压缩。
8、 Create Invalidation
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论