Litchi’s Blog一直使用又拍云的对象存储和CDN服务的,我也加入了又拍云联盟,所以送的额度完全够我的小站使用,最近我的博客开启了全站https访问,UPYUN的二级域名也支持https,所以很顺利就开启了,但是这两天我登录又拍云看了一下账单,发现又拍云的https流量和次数是额外收费的,虽然对我的小博客来说一天也就几分钱,但是还是感觉不爽,本人还是想用纯免费的服务。。
于是在网上搜索了一番,发现阿里或者腾讯或者七牛的对象存储和CDN服务并不能满足我这小小的要求(完全免费),要么是要求备案,要么是不支持https访问,或者https访问需要另掏钱,今天搜索了一下午,Litchi发现UCLOUD也是提供免费对象存储和CDN的,只要完成个人认证,就自动送了免费的额度,唯一一点就是UCLOUD送的CDN加速域名不支持HTTPS访问,用自定义域名的话,也是要求备案的,苦于我的小站并没有备案,难道要止步于此了吗?
于是我想到了曲线救国的方案,并且成功实现了免备案免插件CDN全站加速和https访问,下面就跟大家分享一下
教程开始
首先我们去注册一个UCLOUD的账号,并且完成个人认证,这个过程我就不多说了,识字的人都能搞定。注意领取CDN免费代金券的激活码记得激活一下:PW17JAM
激活之后代金券里可以看到34元的代金券,在云分发里可以购买100G的流量包
接下来我们登录控制台后创建一个对象存储如下图
地点选择国内,北京或者上海都行,空间类型选择公开空间,然后输入一个名字点确定
进入我们创建的对象存储空间后,点击域名管理,然后把下面的加速开启
然后点击镜像回源,添加上我们网站的网址,只能选择http开头,不要担心,不用管它,直接写上我们的网址www.863134.com,然后我们点左上角的全部产品,然后选择云分发,直接点到域名管理页面,如下图
我们在此页面,可以看到我们已经有一个加速域名了,但是这个域名是不支持https访问的,右边可以看到https加速小绿灯没有亮,先不管它,我们先把我们的加速域名记下来,863134.ufile.ucloud.com.cn,然后点击全部产品,一直往下拉,找到证书管理USSL,在右下角如下图
然后在证书页面点击购买证书,按我下图选择免费一年的SSL证书
然后一路确定,并且支付0元,返回证书界面之后,点击补全信息,在弹出页面内把信息填上,关键点是域名绑定域名栏填写我们刚刚记下的UCLOUD送我们的加速域名863134.ufile.ucloud.com.cn(改成你自己的),最下面验证方式选择文件验证,然后点击提交。接下来我们会看到给我们的文件信息如下图
我们在桌面创建一个txt文档,起名为fileauth.txt,文件内容复制上2019042215075828tdp0cq65bjs231p98q0ldr0hay4k5a09kuchajv3yxwo1y52(更换为你自己的内容),点击确定,然后关键点又来了,我们点左上角的全部产品,然后选择对象存储,进入我们刚刚创建的对象存储空间,点击文件管理,然后点击上传文件,如下图
点击自定义前缀,填上.well-known/pki-validation,然后上传我们刚刚创建的fileauth.txt文件,然后回到USSL证书管理页面点击验证,等待大概5-10分钟会提示验证通过。状态变成已颁发,右边多了一个下载按钮,我们点击下载。
解压完成后,我们在nginx文件夹下会看到两个文件,分别是public.pem和private.key,然后我们点击全部产品,选择云分发,进入CDN云分发页面,点击证书管理,然后点击创建证书,如下图
名字自己起,第一个文件选择public.pem,第二个文件选择private.key,然后点击确定,接下来我们继续在云分发页面点击域名管理,然后点击左边资源id下面的对照的名字
然后在基本信息里把https加速点开,因为我的小站基本都是国人看,所以只选择了国内加速,点击按钮改成启用
弹出的页面里会让我们选择证书,默认就是我们刚刚创建的证书,点击确定。到这一步基本上就操作完了,当然我们还可以在该页面里点击域名配置,把我们的缓存规则改一下,我一般就是缓存图片
此时我们在UCLOUD的设置就已经完成了,说白了就是给UCLOUD送我们的加速域名申请了一个SSL证书,这样他就支持https访问了。下面的教程是免插件开启wordpress的CDN方法,结合我们需要用到的就是我们刚刚在UCLOUD的加速域名863134.ufile.ucloud.com.cn(换成你自己的)
免插件纯代码让wordpress使用CDN教程如下:
只需要修改我Blog主题的文件夹里的functions.php文件,在下面添加以下代码
/*静态文件CDN加速*/ define('FocusCDNHost','https://www.863134.com');//wordpress网站网址 define('FocusCDNRemote','https://863134.ufile.ucloud.com.cn');//cdn域名 define('FocusCDNIncludes','wp-content,wp-includes');//设置加速目录 define('FocusCDNExcludes','.php|.xml|.html|.po|.mo|.js|.css|.htm|.ttf|.woff|');//设置文件白名单 define('FocusCDNRelative','');//Check this if you want to have links like <wp-content/abc.png> rewritten - i.e. without your blog's domain as prefix. function do_cdnrewrite_ob_start() { $rewriter = new FocusCDNRewriteWordpress(); $rewriter->register_as_output_buffer(); } add_action('template_redirect', 'do_cdnrewrite_ob_start'); class FocusCDNRewriteWordpress extends FocusCDNRewrite { function __construct() { $excl_tmp = FocusCDNExcludes; $excludes = array_map('trim', explode('|', $excl_tmp)); parent::__construct( FocusCDNHost, FocusCDNRemote, FocusCDNIncludes, $excludes, !!FocusCDNRelative ); } public function register_as_output_buffer() { if ($this->blog_url != FocusCDNRemote) { ob_start(array(&$this, 'rewrite')); } } } class FocusCDNRewrite { var $blog_url = null; var $cdn_url = null; var $include_dirs = null; var $excludes = array(); var $rootrelative = false; function __construct($blog_url, $cdn_url, $include_dirs, array $excludes, $root_relative) { $this->blog_url = $blog_url; $this->cdn_url = $cdn_url; $this->include_dirs = $include_dirs; $this->excludes = $excludes; $this->rootrelative = $root_relative; } protected function exclude_single(&$match) { foreach ($this->excludes as $badword) { if (stristr($match, $badword) != false) { return true; } } return false; } protected function rewrite_single(&$match) { if ($this->exclude_single($match[0])) { return $match[0]; } else { if (!$this->rootrelative || strstr($match[0], $this->blog_url)) { return str_replace($this->blog_url, $this->cdn_url, $match[0]); } else { return $this->cdn_url . $match[0]; } } } protected function include_dirs_to_pattern() { $input = explode(',', $this->include_dirs); if ($this->include_dirs == '' || count($input) < 1) { return 'wp\-content|wp\-includes'; } else { return implode('|', array_map('quotemeta', array_map('trim', $input))); } } public function rewrite(&$content) { $dirs = $this->include_dirs_to_pattern(); $regex = '#(?<=[(\"\'])'; $regex .= $this->rootrelative ? ('(?:'.quotemeta($this->blog_url).')?') : quotemeta($this->blog_url); $regex .= '/(?:((?:'.$dirs.')[^\"\')]+)|([^/\"\']+\.[^/\"\')]+))(?=[\"\')])#'; return preg_replace_callback($regex, array(&$this, 'rewrite_single'), $content); } }
代码里的网站地址换成你自己的地址,CDN加速地址输入我们刚刚在UCLOUD得到的加速地址,由于我只加速图片,所以白名单里我把CSS和JS还有字体文件都过滤了,因你的情况而异吧。
这样全部教程就完毕了,我们稍微费了点事就实现了未备案的网站开启静态资源CDN加速和https全站访问,最关键是对于像Litchi’s Blog这样的小站来说,完全免费啊,不知道UCLOUD允不允许这种操作,但是目前我的小站采用这种方式一切正常,最后码字不易,各位转载的话请标明出处:Litchi’s Blog,谢谢啦
8 Comments
演示站就是本站,用的国外的VPS,静态资源用UCLOUD,速度很快哦
为什么我在验证ussl这一步总是不匹配;(http请求获取文件 http://fileauth.txt/.well-known/pki-validation/fileauth.txt 出错且https请求获取文件 https://fileauth.txt/.well-known/pki-validation/fileauth.txt 出错) 提示这个。domain和你的不一样啊 ,是不是中间缺少了一步骤
@gao 我是一步一步截的图啊,没有漏步骤,你看看是不是fileauth.txt这个文件你上传错路径了
@Litchi 你到上传文件,验证的时候,为啥显示的是icu.ac.cn这个域名,不应该是系统分配给你的那个加速的域名吗?
@gao 你到上传文件,验证的时候,为啥显示的是icu.ac.cn这个域名,不应该是系统分配给你的那个加速的域名吗
最后那个全站HTTPS和开启CDN有点不明白,能给详细讲一下吗?
@effer 其实就是把静态资源和动态资源分离了,静态资源也可以使用https这样的网址访问
@Litchi 我还以为是直接给网站套CDN了,哈哈。