+86 135 410 16684Mon. - Fri. 10:00-22:00

CloudFront+WordPress实现全站CDN配置详解

CloudFront+WordPress实现全站CDN配置详解

CloudFront+WordPress实现全站CDN配置详解

准备工作

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

AWS账号审查机制可谓是全球几大知名服务商里最松的了,虚拟信用卡就可以过验证。

开始配置

打开AWS控制台,点击CloudFront

1511766749-5332-E98089E58CBA-20170725001

然后点击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,其他选项不变即可

1511766749-8062-E98089E58CBA-20170726001

 

配置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以提高安全性

具体配置看图

1511766750-6873-E98089E58CBA-20170725003

1511766753-3006-E98089E58CBA-20170725004

 

配置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签发证书后回来刷新一下就有你的证书了,应用即可

其他默认,看图即可

1511766750-9868-E98089E58CBA-20170725005

 

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

后期附加操作

 

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

到Behaviors,点击Create Behavior

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

如图配置

1511766751-5710-E98089E58CBA-201707250061511766751-2678-E98089E58CBA-20170725007

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

最后好了应该是这样

1511766751-1716-20170725008-e1500982751398

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

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

1511766752-1674-E98089E58CBA-20170725009

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

 

使用感受

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

Aws import ssl 证书

 

购买的证书内容:

 

证书区分区域,只有在某个RGION导入的证书这个region才可以看到。

1511766752-7286-ssl1

 

Aws need to import form:

1511766752-4134-ssl2

这三个框分别对应上面三个文件是:

body是cer文件,key是server.key,chain是中级证书

 

Aws Cloudfront设置不缓存

aws 的cf需要可以根据自己需要配置那些文件不缓存,方法如下:

首先进入cf主页面,在这里设置不需要缓存的文件类型和目录:

1511766753-4309-cf1

1511766753-7381-cf2

1511766754-6422-cf3

这样设置完成后这些文件就不在缓存了。

还有一种情况,如果一个目录a你想设置5分钟自己清除缓存,而a目录下b目录文件夹需要不缓存,可以这么设置:

首先,CDN没有自动刷新,都是TTL即缓存时间,按照你的条件就是设置defaultTTL为5分钟。

另外,对于重合路径会按照Behavior里的顺序,以及最小集合。

所以,大概的设置就是

/a/b/*   TTL 0

/a/* TTL 5mins