AWS CloudFront CDN直接全站加速折腾记The request could not be satisfied. Bad request

AWS CloudFront CDN直接全站加速折腾记The request could not be satisfied. Bad request

ERROR

The request could not be satisfied. Bad request.

Generated by cloudfront (CloudFront)

Request ID: JC3i8piJpjRbuP81MNhSKPxt5KWirIInynZgwFJ9EYKuysjS5A_AnQ==

上面这个问题害我着急的很啊。在这里谢谢远在东京的小伙伴在百忙之中帮我分析解决这个问题。

使用AWS也有段时间了,基本常用的服务都用了,还有很多服务没用上,正在慢慢摸索中。。说实话,AWS的API真的是太全了,同时也太tmd的多了,看都看不完,只能用的时候慢慢翻。对于我这个En烂到家的人来说,有些文档看着不是一般的吃力啊。

 

今天来说说这几天折腾CloudFront的经历吧。因为目前维护的一些老的项目,都是一些无力吐槽的项目,各种静态图片和pdf加载,每月的账单全用在这流量上了。看到CloudFront有50G的免费流量干嘛不用呢(账号还在免费期,国外的云就是好,不像国内,说是免费或者优惠,其实呢。更难懂的是AWS居然有北京区域了,干嘛不提供免费期呢。。。。。)

对于CloudFront就不多介绍了,官方文档说明很详细,直接进入主题。看图说话。配置步骤其实很简单,很多都是默认(有些设置我自己也不知道具体干什么的,还在研究)

AWS CloudFront CDN直接全站加速折腾记The request could not be satisfied. Bad request

AWS CloudFront CDN直接全站加速折腾记The request could not be satisfied. Bad request

我这次是直接进行全站加速,选择的源是web服务器,所以这里就是www.xxxx.com 其他默认

AWS CloudFront CDN直接全站加速折腾记The request could not be satisfied. Bad request

这里 cname其实是个很重要的东西,我第一次填的是www.xxx.com 我的域名

AWS CloudFront CDN直接全站加速折腾记The request could not be satisfied. Bad request

接下来提交保存 会有这样一条记录 CF会分配一个默认域名。然后将你web服务器的源部署到全球所有节点。这个需要等待一会。博主大概等了20分钟 status状态才变成Deploy

然后通过这个域名直接访问 如果正常访问web页面,说明已经部署OK 了,然后要做的就是去你的域名服务器,增加cname记录,指向这个默认的域名d3uaXXXXX.cloudfront.net

 

一般添加好之后,试试有没有解析成功

直接nslookup你的域名,看看解析地址是否有多个,如下,如果正确就OK 了。说明域名解析成功,已经指向CF进行全站加速了

AWS CloudFront CDN直接全站加速折腾记The request could not be satisfied. Bad request

这个时候,你可以试试你网站的速度了。

 

下图是我加速前测试的速度
AWS CloudFront CDN直接全站加速折腾记The request could not be satisfied. Bad request

 

加速后效果果然不一般,虽然AWS目前在大陆还没有CDN的加速节点,最近的在*。国内网速又那么坑爹。所以这样已经不错了。

到这里,我以为CDN已经OK了,谁知道没过多久。就出现本文开始的那段错误。。坑爹啊。咋回事呢,我就说没那么容易吗,记得之前有网友就跟我说过,说aws的这个CloudFront是个坑。。

我当时没在意,因为我简单的看了下官方文档,看说明,感觉很简单啊。。。就这样一步步配置,也就这样成功了。谁知道后面发生那么多未知的问题,然后就是按照错误提示,各种搜索,百度,google等,也搜到过类似的问题,但是按照其中的方法,发现还是不能解决我这个错误。

大部分都是配合S3使用的,还是对wp进行cdn配置,wp大家都知道,现成插件一大堆。安装启用设置就搞定了。那些方法根本没法解决我的这个错误问题。

 

没办法只能继续摸索改配置,各种试试。最终弄到后半夜,也没解决。还安慰自己说,官方说部署到全球节点在48小时以内,而且dns解析也需要时间,是不是等段时间就好了。干脆睡觉,第二天在看。

第二天一看,才发现是自己想多了。肯定是哪里配置错误了。但是错误在哪里,就一个一个再次改配置分析问题咯。只能先找到错误点再说。最终无奈寻求了技术群里的大牛进行求助。。。经过一个好友的共同分析,最终发现问题是自己配置的源和cname有冲突造成的。

 

应该改成这样

AWS CloudFront CDN直接全站加速折腾记The request could not be satisfied. Bad request

origin的源不应该直接跟你的域名是一样的,cnames同样,因为你的域名已经指向了EC2主机,域名的dns添加了cname指向了CloudFront,而CloudFront又从域名作为源缓存数据,这样感觉有点类似死循环的样子。

所以东京的这位小伙伴建议我设置个二级域名能够访问web的,然后CloudFront这里通过这个二级域名作为源,cnames对域名下所有子域名进行加速,就是这种*.域名的方式,通配符设置。

 

因为我应用服务器是IIS,就绑定了个二级域名,然后Dns域名服务器添加A记录,子域名指向EC2主机ip,这样一配置,果然等了半个小时,问题完美解决。。。。

 

这玩意断断续续折腾了2天时间,所以记录一下。网上又没有完全一样的教程,所以分享一下帮助更多遇到同样问题的人,希望对同类问题的人有所帮助。。。

 

截图码字不容易,只希望对你有帮助。同时感谢帮助过我的人。更多AWS相关内容请见我的个人博客

上一篇:前端工程师如何快速的开发一个微信JSSDK应用


下一篇:《Akka应用模式:分布式应用程序设计实践指南》读书笔记3