CloudFront+WordPress实现全站CDN

作者: admin 分类: wordpress 发布时间: 2019-02-13 10:49

准备工作
CloudFront是Amazon家的东西,所以需要准备一个AWS账号

AWS账号审查机制可谓是全球几大知名服务商里最松的了,虚拟信用卡就可以过验证,这也导致了这几年AWS东亚网络质量直线下降,所以注册并不麻烦,某宝上面一刀信用卡特别多实在不行可以去拍一张,这里不再复述

开始配置
打开AWS控制台,点击CloudFront

然后点击Create Distribution,在Web栏下面点击Get started即开始配置

配置Origin Settings回源设置
Origin Domain Name就是你的源站域名(请注意CloudFront源站不接受ip地址,强制使用域名,我也不知道为什么)

但是请注意,这里的Origin Domain Name可不能填写网站的主域名,比如对于奶冰的IceBox来说这里就不能直接填写milkice.me,而是要开个子域名直接指向源站IP,比如这里的www.milkice.me就是开了个A记录到源站IP

Origin Path就是你想要加速的路径(默认为空)

比如你的源站地址是http://example.com/wordpress,则Origin Domain Name这里可以填写一个xxx.example.com,然后DNS记录里设置xxx.example.com指向源站ip,Origin Path填写/wordpress

如果你想要部署强制https可以选择HTTPS only,其他选项不变即可

配置Default Cache Behavior Settings
Default Cache Behavior Settings,其实就是配置在默认情况下CloudFront的一些缓存条件

这里的默认情况即我们想要缓存加速的文件(有些目录需要另外加Behavior来排除,后文会说)

由于wordpress的一些特性,有一些设置需要变动

Forward Headers(转发header)需要将host添加进白名单设置
Whitelist Cookies(Cookie白名单)需要将wordpress*和wp*加入白名单
Query String Forwarding and Caching一些博主推荐设置为Forward all, cache based on all,但是在奶冰这里测试的情况下如果选择cache based on all会导致基本上所有请求都不会缓存(抓包抓到的HTTP头里基本上都是X-Cache:Miss from cloudfront),前期不推荐cache based on all,后期像搜索功能如果出现了问题可以尝试开启
(可选)Viewer Protocol Policy中,如果站点是HTTPS站点可以设置Redirect HTTP to HTTPS以提高安全性
具体配置看图

配置Distribution Settings分发设置
有这么若干要配置的点

Price Class个人觉得不用配置也可以,不过你要是想省点钱的话就选择第二档(Use Only US, Canada, Europe and Asia)
Alternate Domain Names(CNAMEs) 对于全局CDN来说这里要填的就是要加速的域名,我这里就是milkice.me
SSL certificate 由于要配置全站CDN所以第一个选项不可用(如果你能忍受那个红色的SSL warning也无所谓),一般都是选择Custom SSL certificate,这里不管你有没有ssl证书你都可以在Amazon Certificate Manager签发Amazon证书用于分发服务器与终端之间的数据加密,点击Request or Import a Certificate with ACM签发证书后回来刷新一下就有你的证书了,应用即可
其他默认,看图即可

这时候就基本完成了,点击Create Distribution,Amazon即开始部署

后期附加操作
估计因为CloudFront在全球节点太多了吧

每次创建/修改设置之后重新配置花的时间挺长的大约5-10分钟,这时候可以慢慢等待或者配置进一步的Behavior Settings

到Behaviors,点击Create Behavior

Path Pattern填写/wp-admin,是不是很熟悉呢,对的没错,wordpress默认管理界面,由于wp-admin一般都需要动态生成所以这时候不需要CloudFront服务器缓存,所以要创建一个Behavior以规避这种情况
Path Pattern填写/wp-login.php,这是在根目录下的用于登陆的一个php文件,由于要POST登录数据所以这个文件也不需要缓存,需要特别设个规则
如图配置

(其实两个配置是一样的只要把Path Pattern的值改一下即可,wp-login.php我就不发截图了)

最后好了应该是这样

接下来去NS服务商配置CNAME记录

将原来的记录删掉,再加个CNAME记录指向CloudFront给出的地址即可

然后就等全球DNS服务器更新缓存吧

(๑´ㅂ`๑)

后续一些使用感受
上了CloudFront之后速度的确快了一点,不过因为第一次访问的时候需要回源下载数据缓存,所以会比较慢

但是很恶心的一点是因为奶冰目前的dns不能根据地理位置分流,导致被分到的CDN边缘节点不是东亚节点而是全球节点,大大降低了访问速度

看了一些别的博主的解决方案是用Amazon的Route 53 GeoDNS功能实现准确分流,但是我又不想把NS服务器转到Amazon那里去(主要是全球48小时更新时间太恶心)

但是似乎可以指定子域名的NS服务器为Route 53,暂时未测试,以后补坑#Mark

参考资料

如何使用AWS的CloudFront做CDN

https://www.ze3kr.com/2017/01/wordpress-full-site-cdn/

https://leonax.net/p/7662/wordpress-complete-cdn-from-scratch/ (不推荐,过于复杂)

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

一条评论
  • 一位WordPress评论者

    2019年2月13日 上午10:49

    嗨,这是一条评论。
    要开始审核、编辑及删除评论,请访问仪表盘的“评论”页面。
    评论者头像来自Gravatar

发表评论

电子邮件地址不会被公开。 必填项已用*标注