未备案wordpress网站使用UCLOUD免费CDN并开启https访问

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,谢谢啦

Litchi

Litchi 整形外科研究生,骨科副主任医师,致公党员,属性:宅。
声明:本站所有资源均来源于网络或是会员上传,版权属于原作者!仅供学习参考,严禁用于任何商业目的,本站不对您的使用负任何责任。如有侵权请联系我删除。

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了,哈哈。

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>