今天拿另一个空间结合ECS测试了一下CDN内容分发网络,一切顺利,现在成文,教你怎么轻松实现利用另一个空间或者CDN来给你的WordPress加速!
系统准备及基本要求
首先你要在承载WordPress的空间之外还要额外拥有一个空间,或者amazon S3之类的CDN服务权限,这里我们使用另一个空间,关于CDN的使用请参考W3TotalCache关于CDN配置的说明。
其次,要有对你的空间绑定的域名DNS有添加A记录的权限,或者完全用另一个域名来实现也是一样的,只是那种事情在国内要求你对两个域名都有备案(再次鄙视万恶的GXB),且这种多域名的访问实现一般只有大型网站才那么干,他们会利用多域名来做负载均衡或者云XX之类的策略。
最后,你得有实体FTP权限,而不是什么WebFTP之类的。
本文采用的实例规格如下:
| 主站 | 阿里云ECS,承载WordPress,绑定域名blog.lnyk2.com |
| 分流 | 万网共享空间(速度够快,只是流量限制),绑定域名site.lnyk2.com |
| 域名 | 使用阿里云对域名进行解析,目前阿里云的域名解析速度是很快的(不是广告,人家做的确实不错,新建A记录后的解析速度基本和我在美国的顶级域.COM解析速度相同,都属于建好就能访问的那种,一般不需要等48小时的同步时间)。 |
| WordPress插件 | W3TotalCache |
| 分流方式 | Self-hosted CDN / FTP |
满足上面的条件吗?OK, Let’s roll!
WordPress W3TotalCache
一般使用WordPress的小伙伴都会使用WordPress Super Cache或者W3TotalCache来静态化缓存,在不使用CDN功能的情况下,也会减少数据库的查询量,从而小幅度提高访问速度。
然而,对于主站带宽不高的童鞋,CDN是你提速的唯一选择了。
这里默认你装好了插件,并做好了你自己的设置,就差CDN没有打开。
准备分流主机
首先FTP到你的分流空间中查看目录结构(没有FTP客户端?那你还玩儿什么?赶紧FileZilla~),一般的网站空间,其HTTP访问目录都不是根目录,我的访问路径是:/htdocs/
如果你的不是(比如WebFaction的主机就需要你自己新建站点),就先记下来。
然后,确定你分流主机的域名DNS,我这里将site.lnyk2.com指派给分流主机。
最后,新建需要的目录。一般都不会把所有东西丢在根目录吧?
我使用/htdocs/static/blog/保存要分流的内容,如果你还有别的主站想要分流,可以以static/为基础新建其他目录,比如/htdocs/static/wiki/,/htdocs/static/gallery/,等待分流主机的域名DNS生效后,就可以进行下一步了。
启用W3TotalCache的CDN设置
进入WordPress的后台控制,进入左侧Performance(性能)选项,在General(总体配置或者什么的,我用的英文版WordPress)里启用CDN,启用完毕后,跳到CDN的配置子项里去。
填写相关配置如下:
| FTP Hostname | site.lnyk2.com |
| FTP Username | 你的FTP用户名 |
| FTP Password | 你的FTP密码 |
| FTP Path | 记得上面让你记下来的路径吗?填在这里,本例使用/htdocs/static/blog |
| SSL Support | 默认就可以,除非你想分流站点使用https访问,而不是http. |
| Replace Site’s hostname with | site.lnyk2.com/static/blog |
这里填写的内容就是在启用CDN之后,页面中需要分流的内容链接前面的路径部分,比如原来的http://blog.lnyk2.com/me.jpg会被重新替换为http://site.lnyk2.com/static/blog/me.jpg.
这一项下面还有个”Add CNAME”按钮,意思是,如果这里只填写一条记录,则所有分流的内容都会指到site.lnyk2.com/static/blog,如果你希望彻底到连DNS解析都分流的话,可以在这里填写更多地CNAME,并准备好相应的DNS解析,因为填写多条记录的时候,W3TotalCache就自动启用内容分类分流了,比如:
| css.lnyk2.com | 分流CSS |
| js.lnyk2.com | 分流head标签中的JS |
| js2.lnyk2.com | 分流紧跟body标签的JS |
| js3.lnyk2.com | 分流body标签之前的JS |
其实对于小型网站来说,完全没必要这样做。
一条就够:site.lnyk2.com/static/blog,不用点Add CNAME按钮。
都设置完毕了嘛?好,点下面的Test按钮,让插件自动进行测试,看看FTP路径或者DNS解析是否正常。
如果通过了测试,恭喜你,就差一步了;如果没通过,根据提示进行相应更改。
最后,点击保存配置,使配置生效。
上传相应内容
这一步其实最简单,只要你上面的内容全部完成,W3TotalCache会帮你完成上传工作。上一步保存完配置之后,页面会刷新,上面多出关于CDN的一行提示,里面有需要的按钮。
首先,如果你的分流空间FTP有连接数限制,就先关闭FileZilla或者你的FTP客户端,释放FTP连接。
点第一个“Export the media library”,这一步会将你媒体库里的所有图片音乐等文件同步到分流主机中。
在弹出的窗口中,有一个蓝色的“Start”,点一下,耐心等待进度条跑到头并且按钮从“Pause”重新变回“Start”,同步就完成了,关闭窗口。
这里需要注意,每次你上传文件到媒体库中之后,W3TotalCache会自动把你上传的文件也FTP到分流主机中一份,不用手动同步。
当然,如果你在媒体库中删除文件的时候,记得在鼠标指向文件行的时候,先点最后面那个“Purge from CDN”,将分流站里的对应文件自动删除先。
点第二个“WP-Includes”,同理,会将你WP-Includes目录中的东西同步到分流主机。
点第三个“Themes”,这一步是同步你的主题相关文件。这里需要注意一下,以后你更改了默认主题,还需要重新同步Themes.
第四个“Custom files”,如果你有自定义的一些CSS之类的东西,就同步一下。我这里没有。
根据需要同步完了所有内容后,这个提示行其实就可以不要了,点“Hide Message”。
检查验收
一切搞定之后,就可以回到主站前台,随便打开一篇有上传过图片的日志,右键查看源代码,找到那张图片的链接,是不是发现图片地址已经变成你的分流主机的链接了?
现在打开FileZilla,重新登陆到你的分流主机空间中,看看你制定的路径里面是不是已经有东西了?
恭喜你,你的主站现在已经是多路分流了,感觉是不是快多了?
这里额外讨论一下,在大多数情况中,只有分流主机网速不是很慢,才能体会出速度提升,当然并不是说分流主机一定得多么的快。提速并不是单单靠分流,而是还有并行读取,在主站向浏览器传送页面的同时,浏览器也在向分流站点请求图片等信息,这样有时候用户会体验到一种情况,页面还没显示完整,页面中的图片就已经全都显示出来了。即使对于单一主机的情况,从HTTP请求解析过程来说,多路请求也会比队列请求要快很多。这也是大多数大型网站都在采用的策略,他们宁愿多分配几个CNAME,让所有信息都有不同的URL,也不想把所有内容放在一个URL下,只使用路径来分割,举个稍微重复一点的例子:
一个HTML中,有下面几个内容:
1 | www.lnyk2.com/js/firefox.js |
同一个HTML,内容变成:
1 | js.lnyk2.com/firefox.js |
这两个HTML展示给访问者的时候,大多数情况下是后面一个快,因为即使第二个页面有3次DNS解析,也是同步进行的,而第一个页面中,虽然只有一次DNS解析,但内容却占用同一个站点的三个并发连接,即使第二个页面的三个子域名都指向同一个主机,并发读取的速度也是比并发连接挨个读取的用户体验要好。
在更普遍的情况下,js/photo/image三个域名指向的是同一个主机的不同虚拟主机,对于访问压力不是很大的站点来说,可以更充分的挖掘http服务器的工作资源,因为这牵扯到一个比较常见的问题:并发连接数。
说了这么多,无非是想让站点快一些,可能有些地方有点吹毛求疵,但如果你主站全功能,而又有一个访问速度不错,但只能存放静态页面的便宜主机,干嘛不利用起来,变成自己的Self-hosted CDN呢?
后记
经过反复测试,W3 Total Cache占用CPU确实比较高,而WordPress Super Cache则是在功能上不如前者,但性能非常优秀。由于我的ECS只指派了一个CPU,在交替启用这两个插件进行测试的时候,是能够明显感觉出反应速度不同的,建议共享空间的童鞋启用W3 Total Cache,而VPC或ECS的童鞋,乖乖Super Cache吧,与其反应速度慢,还不如让读取速度慢点儿。
还有,如果你启用W3 Total Cache的Minify之后,页面乱了,很有可能是你的JS/html/css内容乱码,这时候需要关闭Browser Cache的Gzip选项!Google了很多帖子,没有说怎么修正这个问题的,只好暂时关闭压缩了。可是这样一来,所有缓存的节约量都赶不上一个大JS压缩后的节约量了。
网上也有很多人说W3 Total Cache的CPU占用率居高不下,很多大型网站被迫改用其他缓存插件。这点在后记一开始我有说明,还是那句话,如果不是网速的原因,童鞋你还是明显觉得慢,肯定就是它的问题了。关闭之后再看看,然后自己做决定是否更换其他的插件。
补充
使用Super Cache也是可以使用CDN的,只是这个CDN是真正的CDN,不是咱的分流主机配合FTP了,一般需要花银子。
但是使用Super Cache搭配Autoptimize还是一个不错的选择,Autoptimize会实现Minify等很多功能。