CloudFront+WordPress实现全站CDN配置详解
准备工作
CloudFront是Amazon家的东西,所以需要准备一个AWS账号
AWS账号审查机制可谓是全球几大知名服务商里最松的了,虚拟信用卡就可以过验证。
开始配置
打开AWS控制台,点击CloudFront
然后点击Create Distribution,在Web栏下面点击Get started即开始配置
配置Origin Settings回源设置
Origin Domain Name就是你的源站域名(请注意CloudFront源站不接受ip地址,强制使用域名)
但是请注意,这里的Origin Domain Name可不能填写网站的主域名,比如不能直接填写bypat.com,而是要开个子域名直接指向源站IP,比如这里的cdn.bypat.com就是开了个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即开始部署
后期附加操作
每次创建/修改设置之后重新配置花的时间挺长的大约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之后速度的确快了一点,不过因为第一次访问的时候需要回源下载数据缓存,所以会比较慢
Aws import ssl 证书
购买的证书内容:
证书区分区域,只有在某个RGION导入的证书这个region才可以看到。
Aws need to import form:
这三个框分别对应上面三个文件是:
body是cer文件,key是server.key,chain是中级证书
Aws Cloudfront设置不缓存
aws 的cf需要可以根据自己需要配置那些文件不缓存,方法如下:
首先进入cf主页面,在这里设置不需要缓存的文件类型和目录:
这样设置完成后这些文件就不在缓存了。
还有一种情况,如果一个目录a你想设置5分钟自己清除缓存,而a目录下b目录文件夹需要不缓存,可以这么设置:
首先,CDN没有自动刷新,都是TTL即缓存时间,按照你的条件就是设置defaultTTL为5分钟。
另外,对于重合路径会按照Behavior里的顺序,以及最小集合。
所以,大概的设置就是
/a/b/* TTL 0
/a/* TTL 5mins