这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

CDN缓存系统搭建教程

该系统为EFV开发的一个简易免费的CDN系统,拥有100%命中率,可自动清理不活跃文件,灵活调整缓存空间。

1 - 介绍及安装教程

CDN系统推荐结合EFV的线路定时功能一起用,即晚上外网网络的拥堵的时候,自动切换到指定CDN线路。

缓存规则

  • cdn系统缓存命中率为100%,也就是只要通过cdn域名访问的视频切片,均会100%缓存到cdn所在的服务器里面,无需担心命中问题。
  • 缓存容量内置上限,也就是最多只能缓存服务器总容量的80%,防止使用过多,影响系统其它进程;当缓存容量超过80%时候,就不会再缓存了,低于80%立即自动缓存。
  • 可以自动清理某时间,比如1天内未被使用的切片,该时间可自行设置;可结合缓存容量上限 一起使用。
  • 防盗链系统,可设置指定域名网站才能使用该cdn域名的切片播放。

安装CDN

系统要求:CentOS 7+Debian 8+Ubuntu 16+(推荐),AlmaLinux 8+Rocky Linux 8+

如果你的切片访问量比较大,那么服务器的cpu即配置尽量好点,且多用几台服务器提供cdn,不然负载多cdn服务器容易卡。

友情提示

如果你的服务器在中国大陆以外,包括中国香港,中国台湾,建议先安装BBR,可优化TCP连接,尽可能让用户流畅的观看视频。

如果你是CentOS 7系统,建议BBR在新装系统的服务器上安装,毕竟超小概率会造成换内核访问不了服务器。

使用SSH客户端,比如Xshell软件,登录服务器,再使用命令:

wget --no-check-certificate -O /opt/bbr.sh https://github.com/teddysun/across/raw/master/bbr.sh
chmod 755 /opt/bbr.sh
/opt/bbr.sh

该脚本会自动给你更换BBR内核,并开启BBRCentOS 7系统安装完成后需要重启服务器,其它系统不需要。

如果第一行命令出现wget: unable to resolve host address报错,则解决方法 ⇒ 传送门

开始安装

首先使用SSH客户端,比如Xshell软件,登录服务器,再使用命令:

#下载脚本
wget --no-check-certificate -O '/tmp/cdn-node.sh' 'https://file.efvcms.com/moeapp/efvcdn/cdn-node.sh'

#运行前请将后面1个参数修改成自己的,即源码安装路径/home,路径自定义,为绝对路径写法,不存在会自动创建
bash /tmp/cdn-node.sh /home

安装完成后,还需要配置才能使用,注意EFV防盗链设置的禁止ts下载功能需要关闭,才能缓存。

配置CDN

如果我的安装目录为/home/cdn-node,则配置文件为/home/cdn-node/config/config.js,在SSH客户端使用命令:

vi /home/cdn-node/config/config.js

首先按一下键盘的i键,进入编辑模式,这时候可以使用键盘进行编辑,编辑代码详解如下:

module.exports = {
dbUrl: "127.0.0.1",
db: "efvcdn",
dbUser: "efvcdn",
dbPassword: "efvcdn",
apiKey: 'iqi36022bytheway', //apiKey随便设置,也可以默认
efvDomain: 'https://127.0.0.1:4000', //设置成你的EFV域名,也可以为ip:3000,且都需要能访问
whiteLists: [
],
antiurls: [
],
banurls: [],
keeptime: 2 //缓存时间,默认单位分钟,如设置60,即自动清理60分钟没有使用过的切片缓存
};

全部编辑好了后,按一下键盘的esc键退出编辑模式,接下来输入英文:wqenter保存退出。

最后如果你不是很会命令行,依然不会修改,可以使用FTP软件或宝塔文件管理,找到该文件后手动修改即可。

配置防盗链

防盗链设置依旧在配置文件/home/cdn-node/config/config.js,大致如下:

antiurls: [
 'play1.efvcms.com',
 'play2.efvcms.com'
],

配置格式一行一个网址,结尾用英文,分开,即切片只能被此处的网站引用播放;反之留空则默认切片可以被所有网站引用播放。

如果设置防盗链后,你播放不了切片,则建议先不设置防盗链。

启动CDN

最后编辑好了后,使用以下命令启动:

#进入源码目录
cd /home/cdn-node
#环境生效
source /etc/profile
#启动程序
pm2 start ecosystem.config.js --env production
#设置开机自启
pm2 save
pm2 startup

#验证是否运行成功,返回Hello World!信息即安装成功
curl 127.0.0.1:3888

最后访问地址就是服务器ip:3888,接下来要正常使用需要绑定一个域名,绑定教程 ⇒ 传送门,反代地址修改为127.0.0.1:3888即可。

当然你有宝塔的话,可以直接使用宝塔添加域名,并设置反向代理,URL填入https://127.0.0.1:3888

特别注意

有时候会因为系统原因,会导致数据库新建失败,从而使cdn运行异常,也就是拉取缓存的时候,会出现504超时错误,这时候使用以下命令:

#将下面命令一起复制进SSH客户端运行
cat <<EOF > createdb
use efvcdn
db.createUser( { user: "efvcdn", pwd: "efvcdn", roles: [ { role: "readWrite", db: "efvcdn" } ] } )
EOF
mongo < createdb && rm -rf createdb

最后再运行命令重启生效:

pm2 reload all

2 - cdn其它用法及缓存清理

CDN系统除了加速切片,还可以使用其接口处理图片的宽高,或类型为webp等。

接口用法

cdn除了加速切片,还可以用作一个图片云处理服务器,直接处理任何的图片地址,并将图片转换为webp格式缓存到本地服务器,体积极小,加载极快,也可直接通过该接口处理调用其它图片。

云处理服务接口/api,调用示例:

https://imageserver.querydata.org/api?url=https://wmdb.querydata.org/movie/poster/no-poster.jpg&width=200&format=webp

#参数详解
url为需要加速处理的图片地址,且服务器必须可以正常请求该图片域名
width和height参数为海报长宽,至少需要存在一个,当仅存在其中一个时,则会保留图片宽高比自动处理!
format为返回类型,支持jpg、png和webp,推荐使用webp,程序会判断浏览器是否支持webp,支持webp返回webp,不支持返回jpg!webp加载实在太快了!

清除缓存文件

有时候我们想清空节点服务器缓存,这里分2部分操作,清楚缓存文件和缓存数据库表。

先停止节点服务器

首先使用SSH客户端,比如Xshell软件,登录服务器,再使用命令:

pm2 kill

删除缓存文件

比如我节点服务器目录为/home/cdn-node,删除/home/cdn-node/public/tmp目录里全部文件即可,可使用命令:

rm -rf /home/cdn-node/public/tmp/*

删除缓存数据库表

使用命令:

mongo efvcdn --eval "db.files.deleteMany({})"

最后输出true则删除成功,然后使用ctrl + d退出即可。

全部操作完成后,使用命令重新启动节点:

#进入源码目录
cd /home/cdn-node
#环境生效
source /etc/profile
#启动程序
pm2 start ecosystem.config.js --env production