1. 一切的始发点
最近突然想要自己自建一个 CDN 系统来给我的博客提供和防护&加速服务。四下看了看,找到了Cdnfly、Goedge、99CDN以及今天的主角——FlexCDN。
我做了一下筛选,这是其他程序被排除的理由:
- Goedge:算是 FlexCDN 前身。原作者被请去喝茶后,内部情况发生变动。新版程序供应链中的JS被投毒。后来发了无毒的版本,但信任崩塌了很难建立。想了解取证可以自行搜索“GoedgeCDN投毒”等关键词,这里我不多臆测了。
- Cdnfly:官网有问题,不是网络就是 SSL 问题。放弃。
- 99CDN:在论坛里发现的这个程序。它完全免费,但是重要核心功能缺失严重,例如五秒盾、JS 验证。
这样看起来,似乎 FlexCDN 是一个不二之选。它主要优势在于以下几点:
- 安装方便,官方提供了安装脚本。只需自己安装数据库然后执行管理系统的安装命令即可。
- 免费版支持添加最多10个节点。
- 自身便具备迁移功能,后续管理系统升级方便。
2. 安装 FlexCDN 控制部分
2.1 CDN 原理
自建 CDN 的一般靠 DNS 分流实现。
CDN 有两种结构,如下(限于成本,这里介绍的是第二种)
- Edge Node→Layer2 Node→Origin Server
- Edge Node→Origin Server
Layer2 节点即 l2 节点,可以大幅提高缓存命中率减少回源请求降低源站负载并提高站点访问速度。
如果你还不理解 CDN 原理,可以看看下图的 FlexCDN 工作原理示意图。图片来源于 FlexCDN 官网 架构 - 文档 - FlexCDN。

其中:
边缘节点
- 接收和响应用户请求的终端节点管理员系统
- 整体的管理控制系统API集群
- 一组API节点,为别的类型节点提供数据和运算支持用户系统
- 为租户提供管理系统(商业版(含商业版、专业版、企业版、旗舰版等)专属)区域监控系统
- 在各个区域监控节点端口连通性(商业版(含商业版、专业版、企业版、旗舰版等)专属)DNS系统
- 一套可以自行搭建的域名解析系统(商业版(含商业版、专业版、企业版、旗舰版等)专属)数据库集群
- 存储系统需要持久化的数据
怎么样,嗯?你说看起来很乱?其实图中这是分布式结构,也就是 FlexCDN 的完全体。只不过我们给自己小网站不需要这么高的性能。所以,在本教程中,我会将管理系统、数据库集群以及API节点集群都塞进一台 4C4G 的机器作为主控机。
所有服务器从雨云购买。我作为代理六五折进货,普通用户也能够通过积分商城领取免费优惠券来获取较低的价格。
2.2 安装 FlexCDN 主控部分
参考页面:安装FlexCDN管理系统 - 文档 - FlexCDN
2.2.1 系统需求
最小需求:
- 操作系统:Linux
- CPU不少于2核心
- 可用内存不少于2G
- 可用硬盘空间不小于20G
对于每日千万访问以上的CDN系统推荐配置如下:
- CPU不少于8核心
- 可用内存不少于16G
- 可用硬盘空间不小于200G
先安装一个 MySQL 数据库,支持 MySQL 5.7.8以上/MySQL 8.x以上/MySQL 9.x以上/TiDB 3.0 以上版本。
随后使用一键安装脚本:
curl -s https://flexcdn.cn/install.sh | bash
若提示安装完成,请在浏览器访问:
http://IP地址:8000/
若执行脚本时报 unzip 相关的错,可以先安装 unzip,以 APT 系系统为例:
apt-get update #用于更新本地软件包索引表
apt-get install unzip #安装 unzip
若浏览器访问 8000 端口出现无法访问或超时的情况,请检查您服务器上防火墙程序的方形规则以及您服务商的安全组规则(若有)。
3. DNS 相关工作
3.1 CNAME 域名
我们自建 CDN 的原理大致是主控机监视节点状态,并在需要时自动修改 DNS 配置并下发规则。
这里使用阿里云 DNS。需要自己备一个空闲域名(不空闲也没什么事)。
不推荐使用 Cloudflare DNS,因为 CF DNS 跨账户 CNAME 解析操作会出发安全保护机制导致解析不可用。而且 CF 不支持分区域解析,这一点很垃。同时,阿里云目前 NDS 云解析服务个人版仅需 19.9元每年,便宜的很。
域名也可以从上面提到的 雨云 进行购买。.com 域名首年53元续费81元!
购买域名后,在阿里云添加域名,并在雨云的域名管理中修改 DNS 服务器
为阿里那边提供的域。
3.2 在管理系统中绑定 DNS API
我们前往 FlexCDN 后台左栏的 域名解析
,进入 DNS 服务商
页面,添加你阿里云账户的 AccessKeyId
与 AccessKeySecret
。(这两项可以在账户访问管理设置中找到)这里并不强制要求使用阿里云 CDN,你也可以使用自己的 DNSPod 等服务商。
保存后,FlexCDN 会自动拉取阿里云下域名列表,我们创建集群并且选择准备好的空闲域名就好了。
4. 安装边缘节点
我们在集群管理中找到添加节点
,填写正确的 IP 以及 SSH 连接方式,系统能够自动在节点上部署边缘节点系统。
安装完成后你便可以看见节点的状态,同时可以为节点设置单独的路线做到分线路解析。
此时,你应该能够看见你的 DNS 记录中多了一条由 FlexCDN 添加的,主机名为您集群设置的,记录值为您节点公开 IP 的 A 记录解析。后续再添加节点时,系统会自动向 DNS 中添加新的 A 记录实现分流。
5. 添加站点
这个过程无需过多赘述,简单。上传你的证书并添加你的站点。然后,开始玩吧!
与你买的 CDN 服务一样,系统会给你一条 CNAME 地址,直接把域名解析到这个地址并等待 DNS 各级缓存刷新即可(DNS 同步过程一般需要2-48小时不等)
6. 尾声:建议、踩坑与参考页面
6.1 建议
FlexCDN 在自用场景下表现不错,适合想要折腾一个 CDN 自己玩而不是对外出售的朋友。
如果想要提升源站并发来规避一定程度的穿盾 CC,可以将源站优化一下或是改为分布式架构,我有一篇教程在这里 站点建设 | 我的 WordPress 高性能源站集群的实现 - 光昭。
6.2 踩坑
我在自建过程中遇到过一下几种坑:
- Cloudflare DNS 跨账号 CNAME 解析导致解析不可用。
- 换用阿里云 DNS 服务后,设置节点路线时,系统会拉取最细分路线,例如细分到省份,而这些路线是阿里云个人版及以下的套餐都不支持的。若是选择了不支持的路线,DNS 那边不会生效,而且会造成系统与 DNS 服务商无法同步记录。这时的解决办法是把所有选择了不支持的路线的节点都删除改为默认路线,随后就能进行同步了。(同步操作亦可手动完成)
6.3 可供参考的页面
- FlexCDN 官网 首页 - FlexCDN | 自建CDN
- FlexCDN 文档 首页 - FlexCDN | 自建CDN
- 我的简单的源站分布式架构的实现 站点建设 | 我的 WordPress 高性能源站集群的实现 - 光昭
X. 版权申明
- 本文作者:Akira(光 · 昭)
- 版权申明:所有文章除特别声明外均系本人自主创作,转载及引用请联系作者,并注明出处(作者、原文链接等)。请在关于页面查看本站采用的版权协议。
- 本文链接:https://www.pyrzo.com/posts/build-your-own-cdn-with-flexcdn-for-acceleration-and-protection
- 封面来源:#女の子 きみ死ぬ - 白-Hyacinth的插画 - pixiv
Comments 2 条评论
不是,你怎么还整了个代理
@GoodBoyboy 很早就整上了,源站集群开销略大嘛(具体还有一篇文章),开个代理便宜些

不过实际上 CDN 节点也在雨云买实在太贵了,路边摊上小厂随便整一台那性价比都是拉爆雨云的。
但论存数据的话,源站放雨云也不用那么经常的备份,毕竟也算中厂了,安全点