写在前面
我的博客搭建在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
,即可打开全球访问加速,效果比单节点好更多。
学习了