设为首页 收藏本站
查看: 1101|回复: 0

[经验分享] AWS企业实战之CloudFront的配置

[复制链接]

尚未签到

发表于 2019-2-22 09:39:49 | 显示全部楼层 |阅读模式
  对于本文,开始并不打算写出来,因为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.net   , 便是cname配置所指向的目标地址
  
  Price class: Use All Edge Locations(Best Performance) 推荐使用默认值,也可以根据实际情况选择区域;
  AWS WAF Web ACL: WAF是web 应用防火墙,没有使用,保持默认none;
  Alternate Domain Names: 配置自定义的域名,比如www.cndirect.com,也就是配置你自己的域名;
  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) {
  return 302 http://test-m-t.dresslink.com$request_uri;
  break;
  }
  if ($http_cloudFront_is_Tablet_viewer = true) {
  set $Tablet_request true;
  }
  if ($Tablet_request = true) {
  return 302 http://test-m-t.dresslink.com$request_uri;
  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区别明显要不同;比如如下链接:
  http://d111111abcdef8.cloudfront.net/main.html?language=de
  http://d111111abcdef8.cloudfront.net/main.html?language=en
  这代表两个不同的链接,会进行缓存;但是在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
  可以指定单个对象的路径或者以*通配符结尾的路径,表示一个或多个对象;
  记住:可以免费提交无效请求1000次,超出次数将收取费用
9、 缓存测试
  在CloudFront处理完每一次请求后,该URL的文件会被缓存一定的时间并自动过期,后续的请求CloudFront返回的响应包头中会包含一个叫做“Age”的包头,单位为秒并代表已经缓存的时间,正常情况下“Age”的值会小于等于CloudFront节点缓存文件的时间。您可以通过使用一些访问URL的命令行,例如“curl”访问一些特定的URL并通过参考响应中“X-Cache”包头以及“Age”包头判断请求是否被缓存,以及缓存时间。
  注: 建议是在Linux下,用curl命令进行测试;windows,容易受缓存干扰。
  




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675624-1-1.html 上篇帖子: aws opsworks cookbook 下篇帖子: 云计算里AWS和Azure的探究
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表