CloudFront+WordPress实现全站CDN

UCloud年度大促

准备工作

CloudFront 是 Amazon 家的东西,所以需要准备一个 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

参考资料

http://www.xiongge.club/170.html

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

https://594250.xyz/index.php/2020/09/08/cloudfrontwordpress%e5%ae%9e%e7%8e%b0%e5%85%a8%e7%ab%99cdn-%ef%bc%88%e8%bd%ac%e8%bd%bd%ef%bc%89/

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

推荐:
今天折腾 CloudFront 的一点点经验,附小教程

YukinoCoco大佬: 首先感谢大喇叭的介绍,让大家 baipiao 上了这么好用的CDN 1. 想要用做不可描述行为,请将源请求策略设置为Managed-AllViewer,源域名填写为一个A记…

AWS CloudFront 建站缓存策略(适用于棉被)

iks大佬: 最近几天 CloudFront 忽然又火起来了,本着“Airport 够用,买鸡鸡只是用来建站”的原则,我也把我的博客 CDN 挪到了 CloudFront。 众所周知,CDN 这玩意儿…

Cloudflare免费版 VS Cloudfront

悟空空大佬: 现阶段国内这两个线路哪个好点?虽然都很烂,但没有别的选择了。 好东东大佬: 那肯定是cloudflare啊 aws cloudfront的收费 流量大了房子都给跑没了 西北老汉大佬: 喇…

练习时长两年半了,给大家表演一个 CloudFront 拉 Hetzner

YukinoCoco大佬: 直接拉欧洲,永远滴神 PS:安徽节点 bugrun大佬: 新手教程有吗 吴彦祖大佬: 会唱跳篮球rap吗 AsogreDreemurr大佬: 楼主给个配置图吧,顺便问一下源…