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

返回本页常规视图.

CDN缓存系统搭建教程

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

1 - 介绍及安装教程

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

缓存规则

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

安装CDN

提示:脚本和客户端都会自动检查并开启BBR加速,无需额外开启。且EFV防盗链设置的禁止ts下载功能需要关闭,才能缓存。

系统要求:CentOS 8+Debian 10+Ubuntu 20.04+AlmaLinux 8+Rocky Linux 8+

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

客户端安装

目前提供一键安装,一键绑定域名客户端,如果你没Linux基础,可以使用,客户端下载 ⇒ 传送门;如果你要在多个服务器安装CDN,可通过右上角添加配置,添加多个服务器并安装CDN,且服务器信息会自动保存,方便进行操作相关指令。

手动安装

如果你有Linux基础,可使用SSH客户端,比如Xshell软件,登录服务器,再使用命令:

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

#运行前请将后面2个参数修改成自己的,即源码安装和缓存路径/home,最后面是EFV域名,可以为ip:3000端口,可以为EFV绑定域名,能访问EFV就行,
bash /tmp/cdn-node.sh /home http://127.0.0.1:3000

安装完成后,访问地址就是服务器ip:3888,接下来要正常使用需要绑定一个域名,再使用命令:

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

#单个域名,运行前请将后面的域名改成自己的,注意提前将域名解析到CDN服务器,会自动申请免费SSL证书
bash /tmp/add_caddy.sh 1.cdn.com

#多个域名,多域名使用英文|分开,注意域名参数的两边单引号别漏了
bash /tmp/add_caddy.sh '1.cdn.com|2.cdn.com|3.cdn.com'

如果你只绑定1个域名,则运行单个域名命令,多个域名则运行多域名命令,且域名不能带http://或https://,且该命令可以重复运行,每次运行会覆盖旧的配置。

配置文件

配置文件为config/config.js,主要参数如下:

efvDomain: 'https://127.0.0.1:4000', //设置成你的EFV域名,也可以为ip:3000,且都需要能访问
keeptime: 1440 //缓存时间,默认单位分钟,如设置1440,即自动清理1天没有使用过的切片缓存

注意修改配置后,需使用pm2 reload cdn-node命令重启生效。

相关命令

启动CDN

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

重启CDN

pm2 reload cdn-node

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目录里全部文件即可,可使用命令:

find /home/cdn-node/public/tmp -type f -delete

删除缓存数据库表

使用命令:

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

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

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

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