V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ZE3kr
V2EX  ›  WordPress

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

  •  
  •   ZE3kr · 2016-02-12 23:09:47 +08:00 · 4917 次点击
    这是一个创建于 3205 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

    第 1 条附言  ·  2016-02-16 09:20:19 +08:00

    现在这个插件已经发布到 WordPress.org 上,大家可以直接在线安装咯!wordpress.org/plugins/full-site-cache-kc/

    第 2 条附言  ·  2017-05-05 17:28:27 +08:00
    全站 CDN 详细的内容请参见 https://ze3kr.com/2017/01/wordpress-full-site-cdn/
    3 条回复    2016-03-19 09:19:53 +08:00
    SuperFashi
        1
    SuperFashi  
       2016-02-12 23:52:30 +08:00 via Android
    滋瓷
    kamin
        2
    kamin  
       2016-02-29 17:38:55 +08:00
    删除插件,解析回原站后。

    部分文章会从原来的 www.xxx.com 301 到 abc.xxx.com 。。。
    ZE3kr
        3
    ZE3kr  
    OP
       2016-03-19 09:19:53 +08:00 via iPhone
    @kamin 不清楚是什么问题,也许是浏览器缓存原因,建议删了插件后也删掉 wp-config.php 原来的代码。现在这个插件已经发布了 2.0.0 版本,更好用了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   968 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 79ms · UTC 21:55 · PVG 05:55 · LAX 13:55 · JFK 16:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.