WordPress 配合 KeyCDN 实现全站 CDN(与免费 SSL 证书)

2016-02-12 23:09:47 +08:00
 ZE3kr

KeyCDN 是一个不错的 CDN 服务,中国访问走香港节点,有缓存的情况下页面加载能在 100~200ms 左右, ping 在 50ms 左右,提供 Letsencrypt 的免费 SSL 证书(它也是 Letsencrypt 的赞助商之一),可以分别设置 Edge 服务器和客户端缓存。从我给的链接注册能拿到 $10 的余额,相当于 250 GB 流量,绝对够用好久了。https://www.keycdn.com/?a=7126

现在的思路就是将 Edge 服务器的缓存设置的足够长,然后服务器判断(在 WordPress 主要脚本加载之前)是否是 KeyCDN ,如果是,则强制清除 $_COOKIE 参数(这样就不会显示 Admin Bar 了)。然后使用另一个域名的网址作为后台管理,例如原本的主页为 https://www.example.com 的,后台管理页面则为 https://wp-admin.example.com/wp-admin/;原本主页为 https://blog.example.com,后台管理页面为 https://wp-admin-blog.example.com/wp-admin/。方法是在后台 Siteurl 和 Homeurl 设置的不同,但是如果在多站点模式下,貌似这样设置存在问题,于是我就直接在 WordPress 加载前修改 $_SERVER,伪造成正常站点的 URL 。除此之外,分别进行动态和静态区分,如果 $_SERVER['SCRIPT_NAME'] 为 /index.php ,那就当作静态其余为动态。两个不同域名站点分别为静态和动态,如果访问的不属于该域名类型,就直接 301 跳转到另一个域名。

然后,根据不同页面类型设置不同的 Cache-Tag Header ,比如主页、搜索页、 Sitemap 、 Feed 、日期页、分类页和标签页中有一个 archive 的 tag ,文章或页面页有一个关于页面 ID 的 tag 。当有一篇文章或页面更新时,删除这个页面 ID 的 tag 和 archive 的 tag ,这样基本上就能达到全面更新了,而且其它不相关页面缓存还在。

为了方便大家使用,我已经把这个功能做成了插件的形式(然而还是需要手动修改一些 PHP 代码)

源码和说明在 GitHub 上

目前存在的问题就是在自定义页面中,不能加载实时浏览(由于跨域的问题,然而我已经做了各种测试,还是没用,似乎是 KeyCDN 的问题),所以也不能在自定义页面里直接修改 widgets ,不过你可以去 /wp-admin/widgets.php 修改。这个插件支持 IP 段的白名单制,如果你静态资源走 KeyCDN ,动态资源又走了别的代理如 CloudFlare ,那么这个就很好用,在也不用担忧暴露源站 IP 了。

我的网站就用了全站 CDN ,虽然是 WordPress ,但速度不亚于静态博客(前提是有缓存的情况下), Edge 服务器上的缓存我设到了一周,欢迎体验 https://www.ze3kr.com

4948 次点击
所在节点    WordPress
3 条回复
SuperFashi
2016-02-12 23:52:30 +08:00
滋瓷
kamin
2016-02-29 17:38:55 +08:00
删除插件,解析回原站后。

部分文章会从原来的 www.xxx.com 301 到 abc.xxx.com 。。。
ZE3kr
2016-03-19 09:19:53 +08:00
@kamin 不清楚是什么问题,也许是浏览器缓存原因,建议删了插件后也删掉 wp-config.php 原来的代码。现在这个插件已经发布了 2.0.0 版本,更好用了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/256228

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX