Abstract
CloudFlare, 又被称作大善人, 赛博活佛🙏. 全世界20%的网络通信都经过了CloudFlare.
他家的CDN是通过反向代理(Reverse Proxy)来实现的. 访问网站的时候, 解析域名的ip, 把ip地址解析到CloudFlare的伺服器上, 再由CloudFlare的伺服器向真实的ip地址发起访问. 这就防止DDoS攻击, 因为攻击者只能看到CloudFlare的伺服器, 不知道真实的伺服器地址. CloudFlare的伺服器也会缓存从源伺服器上获取的内容, 这样就缓解了伺服器的压力, 而且他们家的CDN伺服器遍布全球, 也就再给访问加速了.
CDN服务的优点和工作原理都差不多, 不过具体在细节上还是有区别的. 亚马逊的CloudFront是拉取型CDN, 首先名字也很霸气”云上先锋”和”云耀”有得一比了. CloudFront不是用CDN伺服器的访问直接替换掉源伺服器的访问, 而是建立了一个中间层. 源伺服器不需要有什么变化, 就是可以通过中间伺服器来进行访问了. 具体区别就是体现在不需要变更原先域名的DNS配置.
Content
CloudFlare
CloudFlare的配置非常简便, 首先在域名商那里设置成使用CloudFlare的DNS服务, 这个步骤很简单霸天一定不会忘记. 然后再进入Account Home→Domain→DNS, 在想要代理的域名那里点一下Proxy Status按钮就成功启动了, 他甚至还会自动重定向https和配置证书! 不过要注意这是用于Viewer和CDN之间的通信, 也就是说如果源伺服器没有配置SSL的话, 在CDN访问源伺服器的时候还是有可能被骇客攻击.

这样就搞定了, 要注意切换域名的DNS提供商需要很长的时间才行, 猜一猜是因为要告诉整个互联网, 解析这个域名的伺服器换了.
CloudFront
CloudFront就不需要修改DNS设置了, 只需要直接创建Distribution然后映射到需要加速的域名就行了. 进入CloudFront→Distributions→右上角Create Distribution→填写配置.
Origin

- Origin 就是需要加速的源于域名, 比如要给img.braveteen.jp套CDN, 就直接照样填上去就行了.
- Origin Path 就是CDN伺服器请求源伺服器的时候还会额外加上的路径, 比如设置成/animal就会变成请求img.braveteen.jp/animal.
- Name 不重要随便填个好认的就行了.
- Origin Shild 是一层额外的缓存, 可以给来自指定地点的访问加速, 原先是亚马逊的Regional Cache Center去访问Origin Server, 配置了后缓存中心就不会访问源伺服器了变成访问Origin Shild. (但注意Origin Shild功能要额外氪金而且还不便宜)
Default Cache Behavior

- Path Pattern 可以让CDN对不同路径的请求使用不同的缓存规则, 不过第一次创建的时候只能用默认(*).
- Compress Objects Automatically 字面上的意思, 参考官方的说明CloudFront只会在Viewer也支持压缩(Accept-Encoding)的时候才会传输压缩版本, 看来没特殊需求的话就开着吧.
- Viewer Protocol Policy 兼容性当然是越强越好了, 肯定是选择HTTP and HTTPS.
- Allowed HTTP Methods 支持功能当然是越多约好了, 选择最多的那个.
- Restrict Viewer Access 开启之后只有请求时带了特定参数的url或cookied的Viewer才能访问, 肯定不开, 需要访问控制的时候再说.
- Cache Policy 选不缓存或者优化缓存就行了, 详细的区别官方文档里面有.
- Origin Request Policy 决定了CDN会把Viewer传递的哪些请求参数也一并传递给源伺服器, 肯定是选全部都要传了.
- Response Headers Policy 让CDN返回给Viewer的响应添加额外的http表头, 不填也行.
Settings

- Anycast Static IP List Anycast 可以让一个ip对应多台伺服器, 也就是一个ip地址对应了多个CDN数据中心. 应该能提高性能, 不过霸天也还没用过不能瞎云.
- Price Class 决定了哪些Edge Location是可用的, 越多越好肯定选择全部.
- Alternate Domain Name 如果没配置的话, 就只能用这个Distriubution自动生成的域名(xxxxxxxxxxxxxx.cloudfront.net)访问这个Distribution.不过也不需要现在就设置, 到时候在DNS提供商那里创建一条CNAME记录, 把Alternate Domain(test.braveteen.jp)给路由到Distribution生成的域名地址就行了, 最后效果就是访问test.braveteen.jp变成了访问xxxxxxxxxxxxxx.cloudfront.net, xxxxxxxxxxxxxx.cloudfront.net再去找源伺服器(img.braveteen.jp)要资讯.
- Custom SSL Certificate 这个还是很重要的, 因为CloudFront不像CloudFlare一样会自动给证书, 如果不配置的话访问域名的时候浏览器是会警告的, 所以手动添加可以用于Alternate Domain的证书.
Conclusion
配置上的主要区别就是CloudFront一定要手动配置Alternate Domain和证书. 注意CloudFront和CloudFlare永久免费不同, 每个月免费的数据传输额度是1TB, http(s)请求次数的额度是10 Miliions次, 超过的话依照Price Class每GB是差不多要0.1美元所以企业级用起来还是比较贵的💸.