Amazon CloudFront 使用及感受
开通了Amazon Web Services
为什么选择CloudFront?
这么说吧,它是市面上唯一可以将小网站的CDN成本控制在$10以内,而且拥有SNI功能(就是支持自定义SSL),而且拥有东京节点(不要提CloudFlare,它对天朝除移动外的运营商的AnyCast做的一塌糊涂),对天朝的网络比较友好的CDN(延迟100ms左右,高峰下载能达到300-400kb/s,抽风时间很少)。
NB:偶真的不是在打广告>_<!
首先,注册完AWS的同学一定会发现,除了CloudFront和Route 53之外都可以用,只有这两个不能用,点进去会说你注册未完成之类的,打开你的电子邮箱应该会发现一封电子邮件,Like this:
Greetings from Amazon Web Services.
This email is to notify you that you have not been granted access to Amazon Route 53 or CloudFront. At this time we are requesting you to provide us with a valid business URL. Additionally, please email us the valid URL from an email addresses associated with the URL.
You can send your message to aws-verification@amazon.com. We apologize for any inconvenience this may have caused, and appreciate your patience with our security measures.
意思就是让你用域名邮箱发一封邮件验证一下。在这里,偶使用了Outlook.com的域名邮箱(就是以前的Windows Live域名邮箱,现在已经注册不到了)。
Domain: https://www.awsgood.com(不一定要商业地址,只要是能打开的就行,当然你是pr%on或者pol*iti^cal之类的要再考虑)
Mail Address: **************@awsgood.com(防止Spam,隐去地址。使用一个admin之类的能够声明域名所有权的邮箱最好)
Please activate my Route 53 and CloudFront Service.
然后使用域名邮箱发出去就可以了。
在晚上10点多的时候,偶收到了回信,具体找不到了,但是大致的意思为你的账户被锁了,不仅CloudFront不能访问,连EC2都不能用了,如果你想解锁,请到账单管理中添加一张替换用的银行卡,后再给我们发邮件我们就可以给你解锁。
What?!这大过年的,至于吗?不过转念一想,算了,这问题应该又是国人自己造成的。一开始偶使用GlobalCash注册的,这东西信用被国人糟蹋了,估计老外都不收了,转而拿出一张建行Visa(好像要求非预付费卡,就是信用卡)输入之。之后再向他们发一封邮件:
I have added an alternative credit Card, please unlock my account.
鉴于偶是第二天早上才看到的邮件,等到偶回复完估计他们都下班了,又要等一天(喂,就算你在拉斯维加斯也不带这样的吧,好歹国际大公司,来了7*24hr Service会屎么?)
第二天入夜终于等来了解锁邮件apologize了一顿;并且告诉偶,你的CloudFront已经Ready了。
配置教程:
0、将你的网站(虚拟主机还是VPS都无所谓,共享还是独立IP都无所谓,主机名也请保持你原先想要关联的那个)的IP关联到一个CNAME上,具体哪里无所谓,但要满足两点:
- 需要能够被稳定的解析
- 需要与你想要关联的域名不同
1、登录CloudFront控制台,看到一个大大的“Create Distribution”按钮,点下去,选择Web(当然是选Web啦,谁要加速Flash啊,那东西比偶年纪都大,早该退休了)。然后把这张又臭又长的表填完(如果你要使用SSL请先跳过这里,上传完证书后再来填表)。
1.5、上传自定义SSL证书
如果你要上传自定义SSL,那么你需要使用AWS CLI命令行工具,你需要使用Linux操作系统(其实Windows也可以,只是安装太麻烦)。安装它,执行sudo apt-get install python python-pip -y && sudo pip install awscli
。再按照以下步骤建立一个AWS IAM管理员账户:
1. 前往AWS IAM处
2. 点击Users页的”Create New Users”
3. 随便起一个用户名,再点击”Create”
4. 将你的Credentials下载下来,待会儿上传证书要用
5. 点击你刚刚创建的用户,在”Permissions”选项卡上点击”Create User Policy”
6. 选择Custom Policy,将以下内容粘贴进下面的框里
{
"Version": "Alpha001",
"Statement": [{
"Effect": "Allow",
"Action": ["*"],
"Resource": ["*"]
}]
}
我们的目的只是尽快上传一张证书,为图简单,这个用户拥有几乎所有权限。请在上传完后将其移除。
7. 将证书的公钥、私钥、证书链分别放到三个文件(使用Base64编码)中,然后上传到装好AWS CLI的Linux操作系统中。
8. 执行,aws configure
,它会让你输入原先的建立用户时输入的“Credentials”。
9. 前往证书所在的目录执行
aws iam upload-server-certificate \
--server-certificate-name {你的证书名称,随便,只要你记得就行} \
--certificate-body file://{证书公钥文件名} \
--private-key file://{证书私钥文件名} \
--path /cloudfront/{路径名称,随便}/ \ #也可以不指定路径,指定路径可以方便你以后移除它。
--certificate-chain file://{证书链文件名}
PS:AWS说他们不接受自签名的根,只接受在软件包ca-certificates中包含的证书。
然后再前往CloudFront管理页面创建Distribution即可。
2、创建好了以后,他会给你一个CNAME,然后你将这个CNAME解析到你想要解析的域名上就可以了。
番外:如果你需要域名邮箱的话
As most of readers know(也可能有人不知道,比如你,所以偶没有用all), MX记录与CNAME记录不共存,因为CNAME象征着完全转发,他会将其所有记录都指向那个唯一的CNAME记录值。如果你既使用CloudFront又想使用域名邮箱,请使用同样由亚马逊出品的Amazon Route 53(不包含在免费套餐中,需要自己付费)。添加网站后向根目录添加alias记录即可。小网站一个月$0.51($0.50域名托管费 + $0.01MX记录解析费),价格算是所有收费DNS中最便宜的了(按一个域名计算)。
NB:验证CloudFront需要域名邮箱,如果用CloudFront不用Route 53就不能用域名邮箱,Route 53又不免费,这什么逻辑。。。
另一种解决办法,使用301,对根域名使用301记录,将根域名的访问全部转到www的子域名上去。
番外的番外:如果遭受DDOS的话
不论CloudFront还是Route 53都使用了Pay As You Go的模式,即按实际使用收费,CloudFront一个月免费50GB,超过的每GB$0.1左右;Route 53每一百万记录$0.01~0.07。在这种收费模式下,如果正常解析那么不会有任何问题,而且比CloudFlare等等的便宜不知多少倍。当然如果你遭受DDOS的话,信用卡被刷爆也是没商量的。不过亚马逊绝对是良心满满,只要你发Ticket,说你被DDOS了就可以被免单。