使用阿里云OSS加速Typecho静态资源

写在前面

我的博客搭建在AWS东京的机器上,国内访问速度实在是不容乐观,特别是一到晚上丢包炸胡。如果能把静态资源放到国内服务器上进行加载,整体访问体验将会有大幅提升。
本文针对的是网站没有备案的小伙伴,使用阿里云OSS提供的Bucket域名和镜像回源实现类似CDN的功能,如果你的域名刚好有备案,按照本文照葫芦画瓢也是可以用上真正的CDN加速的。

2020-5-3更新:注意,如果你的机器在大陆访问并不慢(指实际带宽够快),并不推荐使用OSS来加速静态资源加载。调用OSS需要使用一个不同于主页的域名,实际测试中额外的DNS解析和TCP握手会损耗约300ms的时间。


不加速时间总和=源站DNS解析时间+源站TCP连接时间+从源站(较慢)载入资源的时间
OSS加速后时间总和=源站DNS解析时间+源站TCP连接时间+OSS域名DNS解析时间+OSS-TCP连接时间+从OSS(很快)载入资源的时间

正确设置OSS

直接新建一个bucket并创建一条镜像回源规则,回源地址填写源站地址。

回源设置
回源设置

创建一条跨域设置,如果你直接使用bucket域名加速静态资源时需要设置,否则会出现静态资源无法载入的情况。(这一步也是坑,网上的资料都是用的自己绑定的域名所以不需要设置跨域)

跨域设置
跨域设置

创建防盗链,阿里OSS的创建规则和大部分CDN有些出入,如果你的站点支持https,同时也要添加一条https://打头的防盗链设置。(草,这一步也是个大坑,困扰了我好长时间)

防盗链设置
防盗链设置

修改Typecho代码,将静态资源链接指向OSS

编辑网站根目录下 config.inc.php
添加如下代码,注意替换你自己的oss地址。后面没有/

/** 定义镜像地址 */
define('__TYPECHO_CDN_DIR__', 'https://yourcdn');

接着打开 \var\Widget\Options.php
在第160行左右,themeUrl这个方法中,
$this->siteUrl 都改为刚刚定义的 __TYPECHO_CDN_DIR__
修改后的代码如下:

    /**
     * 获取模板路径
     *
     * @access protected
     * @return string
     */
  protected function ___themeUrl()
    {
        return defined('__TYPECHO_THEME_URL__') ? __TYPECHO_THEME_URL__ :
            Typecho_Common::url(__TYPECHO_THEME_DIR__ . '/' . $this->theme,__TYPECHO_CDN_DIR__);
    }

同样的, pluginUrl也用同样方法修改
修改后的代码如下:

 /**
     * 获取插件路径
     *
     * @access protected
     * @return string
     */
    protected function ___pluginUrl()
    {
        return defined('__TYPECHO_PLUGIN_URL__') ? __TYPECHO_PLUGIN_URL__ :
            Typecho_Common::url(__TYPECHO_PLUGIN_DIR__, __TYPECHO_CDN_DIR__);
    }

保存,结束。

刷新首页,看一看静态资源加载地址是不是已经变成OSS的地址了!
嗯,明显变快了许多!

有钱的土豪朋友们更可以进一步在OSS控制台打开 全地域加速
并按上述步骤把定义镜像地址改成 yourbucket.oss-accelerate.aliyuncs.com,即可打开全球访问加速,效果比单节点好更多。

添加新评论

已有 1 条评论