【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程

【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程

【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程-不二云端
【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程
此内容为付费资源,请付费后查看
11
立即购买
您当前未登录!建议登陆后购买,可保存购买订单
付费资源

一、前言

本文记录一下使用 [Cdnfly – 自建cdn|防CC攻击|cdn软件|cdn系统] 搭建CDN系统,保姆级教程 适合小白食用

个人感觉自建CDN反代网站效果都差不多,都可以实现加速 缓存 防攻击等功能,但我暂时还不是很懂nginx相关配置,相较而言 自建CDN更容易批量维护和管理各节点

官方安装文档:安装说明 · Cdnfly使用文档

二、准备

主控和被控均不能在 已安装nginx的情况下 执行安装命令,必须确保80 443端口未被占用!!!

系统必须为centos7或ubuntu16.04 !!! debian11 ubuntu20 centos8 centos6等系统都不支持

主控需开放80 88 443 9200端口

节点需要开放 80 443 5000端口

  • 一台最小4GB内存的服务器(vps)做主控(cdn面板控制台)
  • 若干服务器做CDN节点
  • 系统:cdnfly主控和被控节点暂时仅支持Centos-7和Ubuntu 16.04系统

本文以一台centos7系统的hetzner 4GB内存vps 做主控

一台任何系统的vps 搭建伪装授权站点,即cdnfly自建云端

一台centos7系统的DO纽约 512MB内存vps 做节点2 接管中国大陆移动以及海外等其他流量

一台centos7系统的DO新加坡 512MB内存vps  做节点2 接管中国大陆的电信和联通流量

为什么用DO 主要是我就知道这一家有0.5GB小内存,虽然这款比一些4GB内存的都贵 但为了测试512MB内存可用 还是选择了DO

为什么CDN节点机器用0.5GB内存小鸡 大部分廉价的国内优化机器只有0.5GB内存

三、cdnfly自建云端

有cdnfly官方授权的可跳过这一步

因为我就是临时个人测试使用,官方那个有些贵

盗版可耻 开发不易 有条件请用正版

cdnfly自建云端搭建方法:

用附件中的包搭建一个站点,绑定域名auth.cdnfly.cn、monitor.cdnfly.cn ,并根据文件中的nginx伪静态配置设置伪静态。

我用宝塔搭建大概为这样:

【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程-诺言资源网
【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程-诺言资源网
【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程-诺言资源网

四、主控服务器设置

主控需要开放 80 88 443 9200端口,并且主控和节点机不能安装在同一机器上,会导致80端口冲突

主控若未开启9200 88端口 会导致程序大量占用CPU直至死机,如有任何问题 建议重置elasticsearch

修改主控vps的hosts文件

修改主控vps的hosts文件,将 auth.cdnfly.cn、monitor.cdnfly.cn 这2个域名指向刚才的自建云端服务器IP

修改hosts意义是 主控vps请求 auth.cdnfly.cn monitor.cdnfly.cn 这两个网站的内容会直接去本地服务器请求,这样就绕过了官方服务器的验证

 
 
 
vi /etc/hosts
 
 
#添加以下内容,记得替换为你自己搭建的IP 你就用这个IP也行
#63.251.217.137 此IP属于DDP 该服务商暂停运营
#请将下文图片中的 63.251.217.137 替换为 51.81.222.246
51.81.222.246 auth.cdnfly.cn monitor.cdnfly.cn
 
 
 
#2023.6.17更新云端IP 此IP可以tcp监控
#51.81.222.246 auth.cdnfly.cn monitor.cdnfly.cn

安装cdnfly控制面板

 
 
 
#直接在主控vps执行这条命令即可,控制面板占用3GB内存,内存不足会安装失败
 
curl -fsSL https://github.com/heardic/cdnfly-kaixin/raw/main/master.sh -o master.sh && chmod +x master.sh && ./master.sh –es-dir /home/es
【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程-诺言资源网

出现上图页面即安装成功,通过 IP 直接访问即可

五、CDN节点服务器配置

我用了两台做CDN节点,节点需要开放80 443 5000端口

一台centos7系统的DO纽约 512MB内存vps 做节点2 接管中国大陆移动以及海外等其他流量

一台centos7系统的DO新加坡 512MB内存vps 做节点2 接管中国大陆的电信和联通流量

1.添加SWAP虚拟内存

1GB内存及以下的小鸡必须添加SWAP否则会报错,2GB以上内存的vps可自行决定是否添加SWAP

2.安装被控服务

进入cdnfly管理员控制台>>系统管理>>系统升级,复制节点安装命令并在节点1和节点2等CDN节点服务器执行

【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程-诺言资源网

下图即为安装成功,cdnfly被控服务会自己安装nginx等

【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程-诺言资源网

3.安装BBR网络加速

Centos安装BBR用以下这条命令或自行百度

wget "https://github.com/cx9208/bbrplus/raw/master/ok_bbrplus_centos.sh" && chmod +x ok_bbrplus_centos.sh && ./ok_bbrplus_centos.sh

4.卸载节点

如果节点想换到另一台主控或者不想占用80 443 ,可以执行以下脚本卸载节点

#!/bin/bash

#判断系统版本
check_sys(){
    local checkType=$1
    local value=$2

    local release=''
    local systemPackage=''
    local packageSupport=''

    if [[ "$release" == "" ]] || [[ "$systemPackage" == "" ]] || [[ "$packageSupport" == "" ]];then

        if [[ -f /etc/redhat-release ]];then
            release="centos"
            systemPackage="yum"
            packageSupport=true

        elif cat /etc/issue | grep -q -E -i "debian";then
            release="debian"
            systemPackage="apt"
            packageSupport=true

        elif cat /etc/issue | grep -q -E -i "ubuntu";then
            release="ubuntu"
            systemPackage="apt"
            packageSupport=true

        elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat";then
            release="centos"
            systemPackage="yum"
            packageSupport=true

        elif cat /proc/version | grep -q -E -i "debian";then
            release="debian"
            systemPackage="apt"
            packageSupport=true

        elif cat /proc/version | grep -q -E -i "ubuntu";then
            release="ubuntu"
            systemPackage="apt"
            packageSupport=true

        elif cat /proc/version | grep -q -E -i "centos|red hat|redhat";then
            release="centos"
            systemPackage="yum"
            packageSupport=true

        else
            release="other"
            systemPackage="other"
            packageSupport=false
        fi
    fi

    echo -e "release=$release\nsystemPackage=$systemPackage\npackageSupport=$packageSupport\n" > /tmp/ezhttp_sys_check_result

    if [[ $checkType == "sysRelease" ]]; then
        if [ "$value" == "$release" ];then
            return 0
        else
            return 1
        fi

    elif [[ $checkType == "packageManager" ]]; then
        if [ "$value" == "$systemPackage" ];then
            return 0
        else
            return 1
        fi

    elif [[ $checkType == "packageSupport" ]]; then
        if $packageSupport;then
            return 0
        else
            return 1
        fi
    fi
}

# 删除同步时间
echo "删除同步时间任务"
if check_sys sysRelease ubuntu || check_sys sysRelease debian;then
    sed -i '/update.cdnfly.cn/d' /var/spool/cron/crontabs/root
    service cron restart

elif check_sys sysRelease centos; then
    sed -i '/update.cdnfly.cn/d' /var/spool/cron/root
    service crond restart
fi

# 删除geoip
echo "删除geoip"
rm -rf /opt/geoip/

# 删除python模块
echo "删除/opt/venv"
rm -rf /opt/venv/

# 卸载openresty
echo "删除openresty"
ps aux | grep [n]ginx | awk '{print $2}' | xargs kill -9
chattr -R -i /usr/local/openresty/
rm -rf /usr/local/openresty
rm -rf /data/nginx/cache/
rm -f /usr/local/lib/libaiwendb.*

# 卸载redis
echo "删除redis"
ps aux | grep [r]edis | awk '{print $2}' | xargs kill -9
rm -rf /usr/local/redis/

# 卸载filebeat
echo "删除filebeat"
supervisorctl -c /opt/cdnfly/agent/conf/supervisord.conf stop filebeat
rm -rf /etc/filebeat/
rpm -e filebeat-7.10.0-1.x86_64 || true


# 卸载syslog
echo "删除syslog配置"
rm -f /etc/rsyslog.d/cdnfly.conf
rm -rf /var/log/cdnfly/
service rsyslog restart || true

# 卸载cdnfly
echo "删除cdnfly"
supervisorctl -c /opt/cdnfly/agent/conf/supervisord.conf stop all
cd /opt
rm -rf cdnfly-agent-*
rm -rf cdnfly_data/
rm -rf .config-bak
rm -rf cdnfly global_black_ip_list global_white_ip_list last_scan_cache last_scan_cache2 redis_pipe
ps aux | grep '[/]opt/cdnfly/agent/conf/supervisord.conf' | awk '{print $2}' | xargs kill -9
sed -i '/\/usr\/local\/openresty\/nginx\/sbin\/nginx/d' /etc/rc.local /etc/rc.d/rc.local
sed -i '/\/opt\/cdnfly\/agent\/conf\/supervisord.conf/d' /etc/rc.local /etc/rc.d/rc.local

iptables -P INPUT ACCEPT || true
iptables -F || true
ipset destroy cdnfly
ipset destroy cdnfly_black
ipset destroy cdnfly_white

echo "卸载完成."

六、cdnfly控制台必要配置

官方安装文档:安装说明 · Cdnfly使用文档

1、添加CDN节点

即主控与被控服务建立连接,添加方法如下图

会提示先修改密码,修改密码在:系统管理>>用户管理>>新增

【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程-诺言资源网

1GB内存小鸡通常会出现 同步cc_filter nginx openresty 以下报错,这是因为内存不够 解决办法是添加虚拟内存即可

2、DNS设置

DNS设置可配置通过API来与第三方DNS提供商无缝对接,来生成网站的CNAME
目前支持aliyun,国内版dnspod,dns.com、dns.la 和cloudflare.com

获取密钥具体参考官方 DNS设置

3、线路分组 设置分线路解析

只有 DNS服务商 支持分线路解析才可以设置分线路解析

例如cloudflare这类国外DNS服务就不支持分线路解析

【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程-诺言资源网

还可以为IP设置权重,权重越大用户访问该IP相对越多

4、添加套餐

  • 名称 – 套餐名称,用户端也会显示这个
  • 描述 – 套餐的说明,也会显示到用户端的套餐购买列表
  • 分配给用户 – 输入用户的id,表示指定该套餐为该用户的专属套餐,只有这个用户能购买此套餐
  • 线路分组 – 上一步添加的线路组,或其它分组,决定网站绑定此套餐后网站配置分发到的节点,以及cname解析的IP
  • 套餐分组 – 为套餐分组,分组也会显示到用户端的套餐购买页面,方便归类购买
  • CNAME域名 – 生成网站cname使用的域名,默认为之前dns设置中的主域名,可以输入其它的域名,但此域名必须跟主域名在同一个dns账号下。
  • 月流量 – G为单位,限制该套餐一个自然月内使用流量的上限
  • 域名数 – 该套餐允许的域名数量,域名数量包括裸域名及各级域名,如www.cdnfly.cn cdnfly.cn算两域名
  • HTTP非80,443端口数 – http可以输入非80,443的端口,此项可以限制非标端口的数量,不允许的话设置为0
  • 四层转发端口数 – 四层转发允许的端口数
  • 自定义CC规则 – 如果此项为允许,用户则可以创建自己的cc规则,并绑定到网站使用。如果为禁止,则用户只允许选择系统内置的规则
  • 排序 – 默认100,小值排在前面
  • 带宽为负值表示无限制
  • 连接数为负值表示不限制连接数

5、添加网站

用管理员权限在 系统管理>>用户管理 创建一个用户 test

以 test 用户登录 然后购买免费的高级套餐,在网站管理>>分组管理>>新增分组后就可以添加网站了

6、节点监控介绍

此节内容于2023.4.24补充,我的云端伪装站点只可以使用http监控,tcp ping监控均无法生效,目前不知到什么原因

#2023.6.17更新 此IP可以tcp监控,看来是宝塔等问题
#51.81.222.246 auth.cdnfly.cn monitor.cdnfly.cn

cdnfly节点自动切换的规则:

cdnfly的节点监控支持主节点宕机自动暂停 并删除该条DNS解析记录

如果设置了备用节点会用一个备用节点替换已失效的主节点 并同步DNS解析记录

当主节点再次恢复正常,cdnfly自动启用主节点并且取消使用备用节点,同时DNS会增加主节点DNS记录删去备用节点的解析记录

以上操作均为系统自动执行无需人工干预,可以选择配置SMTP发信服务,可以收到 节点失效/节点恢复/切换操作 等通知

7、单节点设置

可以限制节点机器的文件缓存大小(不要超过vps硬盘本身大小)

可以设置节点出站速度(100Mbps=12.5MB/s)

【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程-诺言资源网

8、禁用API(多用户必设置)(重要重要重要!!!)

2023.5.21 cdnfly5.1.13存在重大漏洞,普通用户生成的API通过某些方法可以拿到管理员权限,解决方法就是禁用API,首先在 cdnfly控制台 > 系统管理 > 系统设置 > 用户相关 > 限制普通用户只能从此域名登录 和限制管理员只能从此域名登录

再依次在这两个登录域名设置 禁止 /v1/ 的所有访问,5.1.13版本的 /v1 路径是执行api的必要路径,封禁就可以避免被黑了*

限制cdnfly从域名登录是避免从源站ip访问到了api

限制管理员是二次防火墙,如果黑客获取了权限,但是不知道你的管理员登录地址,他就只能对普通用户更改

【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程-诺言资源网
【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程-诺言资源网

七、cdnfly控制台推荐配置

1、设置CC防护

这个根据自己需要设置就好了,还可以自定义CC规则

比如设置单IP 10s内最大访问 329.tanglu.cf 资源数为100,单个资源最大次数为20

这个防一般的单IP CC攻击很有效,推荐设置

一些发卡站避免被机器人检查可以设置访问该域名需要点击验证

【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程-诺言资源网

2、设置CDN缓存文件类型

这个也是根据自己网站的资源类型,以下是我博客的设置

缓存设置建议参考官方文档:缓存配置 · Cdnfly使用文档

默认为不缓存任何文件

3、设置CDN节点服务器缓存大小和最大带宽

【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程-诺言资源网

4、申请证书

cdnfly的证书是自动续签的

cdnfly申请证书很简单有两种方法

一种是在 网站管理 > 证书管理 > 我的证书 中申请证书

当然也可以上传自己的证书

如果没有申请成功,可以在 我的网站 > 高级配置 中开启 /.well-known/acme-challenge/请求回源

八、cdnfly控制台其他配置

1、短信/邮箱提示

2、对接支付

3、转发

转发容易封禁端口,不建议用CDN服务器做转发

4、面板通过域名访问

直接套cloudflare,或者套其它CDN,也可以用其他机器反代 但感觉没必要

5、节点监控和宕机自动切换

需要配置SMTP节点超时会提示和开启宕机自动切换自动切换

6、cdnfly设置反代

这个功能就是指定回源host,实现反代的功能

比如想给R2套第三方CDN就需要在第三方CDN配置回源host指向R2的绑定域名

举个指定CDN回源host,实现反代的功能的例子:

源站 A,现在用 B 反代源站 ,如果直接给B配置普通CDN CDN设置回源站点是 A,CDN解析出A的IP 2.2.2.2 然后发送http请求为 ‘’域名B IP2.2.2.2’,因为源站点没有配置B这个站点 访问就会报错。但是CDN设置指定回源HOST为A,CDN设置回源请求就是 ‘IP是2.2.2.2 回源域名是 A’,这样就可以成功访问了

【亲测】Cdnfly开心版5.1.13 附详细搭建使用教程-诺言资源网

九、备份和恢复

cdnfly提供了非常简单的备份和恢复功能

1、备份

主控默认会每两小时备份数据库,备份默认保留7天(可以自行修改保留天数),备份文件在 /data/backup/cdn/

除了备份数据库,还需要备份 /opt/cdnfly/master/conf 文件夹下的 config.py 文件(其实记住AES_KEY和LOG_PWD就行了)

恢复时只需要用到这两个文件,为了防止主控失联,建议每天上传备份

2、恢复

此操作参考cdnfly官网,亲测有效

旧主控:

将旧主控 /data/backup/cdn/ 下的某个时间的数据库备份包 如 mysql-20230724-010931.sql.gz 下载到本地,重命名为 cdn.sql.gz

将旧主控的 /opt/cdnfly/master/conf/config.py 文件也下载下来

关闭旧主控,这里记得关闭,如果不关闭的话新旧主控同时运行会出现后台任务只创建但不执行,导致新主控无法正常运行

新主控:

首先正常执行安装主控命令:

如果有需要自授权请先搭建云端 修改hosts

curl -fsSL https://github.com/heardic/cdnfly-kaixin/raw/main/master.sh -o master.sh && chmod +x master.sh && ./master.sh --es-dir /home/es

然后ssh连接新主控,恢复备份和config. py,初始化es

 
#进入主控root目录
cd /root
 
#将上节备份的数据库文件 cdn.sql.gz 上传到root目录
 
#在root目录下执行以下两条命令 恢复数据库
curl http://us.centos.bz/cdnfly/restore_master.sh -o restore_master.sh && chmod +x restore_master.sh
 
./restore_master.sh
 
#将上节备份的旧主控 /opt/cdnfly/master/conf/config.py 上传新主控相同位置,实现替换掉新主控的config.py文件
 
#依次执行以下四条命令初始化elasticsearch
cd /tmp
vim int_es.sh(把下面的sh脚本粘贴进去)
chmod +x int_es.sh
./int_es.sh /home/es
 
supervisorctl -c /opt/cdnfly/master/conf/supervisord.conf restart all
 
#至此主控设置完成,通过旧主控的账号密码进入可以发现 节点 用户 网站 日志 dns等都恢复了
#接下来只需要对旧节点更换IP即可
 
 
 
#!/bin/bash -x
 
set -o errexit
 
#判断系统版本
check_sys(){
local checkType=$1
local value=$2
 
local release=''
local systemPackage=''
local packageSupport=''
 
if [[ "$release" == "" ]] || [[ "$systemPackage" == "" ]] || [[ "$packageSupport" == "" ]];then
 
if [[ -f /etc/redhat-release ]];then
release="centos"
systemPackage="yum"
packageSupport=true
 
elif cat /etc/issue | grep -q -E -i "debian";then
release="debian"
systemPackage="apt"
packageSupport=true
 
elif cat /etc/issue | grep -q -E -i "ubuntu";then
release="ubuntu"
systemPackage="apt"
packageSupport=true
 
elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat";then
release="centos"
systemPackage="yum"
packageSupport=true
 
elif cat /proc/version | grep -q -E -i "debian";then
release="debian"
systemPackage="apt"
packageSupport=true
 
elif cat /proc/version | grep -q -E -i "ubuntu";then
release="ubuntu"
systemPackage="apt"
packageSupport=true
 
elif cat /proc/version | grep -q -E -i "centos|red hat|redhat";then
release="centos"
systemPackage="yum"
packageSupport=true
 
else
release="other"
systemPackage="other"
packageSupport=false
fi
fi
 
echo -e "release=$release\nsystemPackage=$systemPackage\npackageSupport=$packageSupport\n" > /tmp/ezhttp_sys_check_result
 
if [[ $checkType == "sysRelease" ]]; then
if [ "$value" == "$release" ];then
return 0
else
return 1
fi
 
elif [[ $checkType == "packageManager" ]]; then
if [ "$value" == "$systemPackage" ];then
return 0
else
return 1
fi
 
elif [[ $checkType == "packageSupport" ]]; then
if $packageSupport;then
return 0
else
return 1
fi
fi
}
 
 
# 停止主控程序
supervisorctl -c /opt/cdnfly/master/conf/supervisord.conf stop all
 
# 恢复mysql
eval `grep MYSQL_PASS /opt/cdnfly/master/conf/config.py`
eval `grep MYSQL_IP /opt/cdnfly/master/conf/config.py`
eval `grep MYSQL_PORT /opt/cdnfly/master/conf/config.py`
eval `grep MYSQL_DB /opt/cdnfly/master/conf/config.py`
eval `grep MYSQL_USER /opt/cdnfly/master/conf/config.py`
 
mysql -h$MYSQL_IP -u$MYSQL_USER -p$MYSQL_PASS -P$MYSQL_PORT -e "drop database $MYSQL_DB;create database $MYSQL_DB;"
gunzip < /root/cdn.sql.gz | mysql -h$MYSQL_IP -u$MYSQL_USER -p$MYSQL_PASS -P$MYSQL_PORT $MYSQL_DB
 
# 关闭维护模式
mysql -h$MYSQL_IP -u$MYSQL_USER -p$MYSQL_PASS -P$MYSQL_PORT $MYSQL_DB -e "update config set value='{\"enable\":0,\"msg\":\"维护中,请稍候重试\"}' where name='maintain' "
 
# 启动主控程序
supervisorctl -c /opt/cdnfly/master/conf/supervisord.conf start all

旧节点

需要将旧节点的旧主控IP替换为新主控的IP

 
 
 
1.新建sh脚本
vim change_ip.sh(粘贴下方的脚本)
2.chmod +x change_ip.sh && bash change_ip.sh your_new_ip
 
 
 
new_master_ip=$1
sed -i "s/ES_IP =.*/ES_IP = \"$new_master_ip\"/" /opt/cdnfly/agent/conf/config.py
sed -i "s/MASTER_IP.*/MASTER_IP = \"$new_master_ip\"/g" /opt/cdnfly/agent/conf/config.py
sed -i "s/hosts:.*/hosts: [\"$new_master_ip:9200\"]/" /opt/cdnfly/agent/conf/filebeat.yml
sed -i "s#http://.*:88#http://$new_master_ip:88#" /usr/local/openresty/nginx/conf/listen_80.conf /usr/local/openresty/nginx/conf/listen_other.conf
ps aux | grep [/]usr/local/openresty/nginx/sbin/nginx | awk '{print $2}' | xargs kill -HUP || true
supervisorctl -c /opt/cdnfly/agent/conf/supervisord.conf restart filebeat
supervisorctl -c /opt/cdnfly/agent/conf/supervisord.conf restart agent
supervisorctl -c /opt/cdnfly/agent/conf/supervisord.conf restart task

新节点:

新节点安装方式和旧节点安装方式一样,只需要将旧主控IP修改为新主控IP 密码修改为旧主控密码即可

旧主控密码忘记了可以在 /opt/cdnfly/master/conf/config.py 可以找到

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容