1. 为什么选择CDNfly开心版第一次接触CDNfly是在帮朋友优化网站时。当时他的电商站点面临一个典型问题国内用户访问速度尚可但海外用户经常反馈加载缓慢。我们尝试过Cloudflare免费方案但自定义程度太低考虑过商业CDN成本又让人望而却步。直到发现CDNfly这个支持分线路解析的开源方案特别是其开心版才找到了性价比与功能性的完美平衡点。CDNfly开心版最吸引我的三个特性是分线路解析可以针对电信、联通、移动等不同运营商设置专属节点多节点管理用低配VPS就能搭建分布式CDN网络可视化控制比Nginx原生配置友好太多像操作虚拟主机面板一样简单不过需要提醒的是开心版虽然功能完整但更适合技术爱好者练手和小型项目使用。如果是商业级应用建议考虑官方授权版本以获得稳定支持。2. 环境准备与避坑指南2.1 硬件配置建议我的实测数据可能会打破你的认知在一台2核4G的腾讯云轻量服务器上CDNfly主控运行24小时的平均内存占用是3.8G。这比官方文档说的至少4G内存要友好得多。但千万别因此就冒险用2G内存的机器——当流量突增时Elasticsearch服务可能直接崩溃。对于节点机有个重要发现512MB内存的小鸡只要正确配置SWAP完全可以稳定运行。我在搬瓦工0.5G内存的机器上测试添加1G SWAP后节点同步成功率从30%提升到了98%。具体配置方法会在第4章详细说明。2.2 系统环境要求踩过最痛的坑是系统版本问题。有次在CentOS 8上折腾三小时都没安装成功后来才发现开心版对glibc版本有特殊要求。目前验证可用的系统包括CentOS 7.6-7.9推荐Ubuntu 16.04/18.04Debian 9/10特别注意如果系统已安装Nginx必须先完全卸载。我有次用yum remove nginx后以为清理干净了结果残留的配置文件导致CDNfly的OpenResty无法正常启动。最稳妥的做法是# CentOS清理命令 yum remove nginx* -y rm -rf /etc/nginx /usr/share/nginx # Ubuntu/Debian清理命令 apt purge nginx* -y rm -rf /etc/nginx /usr/share/nginx3. 自建授权服务器实战3.1 授权系统搭建原版CDNfly需要连接官方服务器验证授权而开心版通过自建授权服务器实现验证。这个设计很巧妙——本质上是在本地模拟了官方的验证流程。我推荐用最便宜的香港或新加坡VPS来搭建因为授权请求的延迟会影响主控面板的响应速度。具体步骤在任意服务器建议1G内存以上创建网站目录下载授权包并解压wget https://vkceyugu.cdn.bspapp.com/VKCEYUGU-10b3891b-be67-4103-a60f-9da1d057470c/b46c7891-1c1a-486e-96f5-a47daa1f8535.zip unzip b46c7891-1c1a-486e-96f5-a47daa1f8535.zip -d /var/www/authNginx配置关键点server { listen 80; server_name auth.cdnfly.cn monitor.cdnfly.cn; location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php/$1 last; break; } } }3.2 常见问题排查遇到过最棘手的问题是PHP环境冲突。有次在宝塔面板环境下安装的bt_safe扩展导致TCP监控失效。解决方法很简单但不容易想到# 查看已安装PHP模块 php -m # 如果存在bt_safe编辑php.ini注释掉 sed -i /bt_safe/d /usr/local/php/etc/php.ini systemctl restart php-fpm4. 主控安装与安全加固4.1 主控安装全流程安装过程其实就一条命令但隐藏着几个关键细节# 推荐使用--es-dir参数指定Elasticsearch数据目录 # 我的经验是不要放在/var下容易磁盘空间不足 curl -fsSL https://github.com/Steady-WJ/cdnfly-kaixin/raw/main/master.sh -o master.sh chmod x master.sh ./master.sh --es-dir /home/es安装完成后必做的三件事修改默认密码wenjian/ceshi太危险在/etc/hosts绑定授权服务器IP检查9200端口监听状态netstat -tulnp | grep 9200 # 如果没有输出需要手动启动Elasticsearch systemctl restart elasticsearch4.2 安全加固方案开心版最大的风险是API漏洞。我设计了一套组合防护策略Cloudflare防火墙规则拦截所有包含/v1/的请求路径限制管理后台访问IP如果是固定IPNginx层防护location ~* ^/v1/ { deny all; return 403; }系统级防护# 安装fail2ban防御爆破 yum install fail2ban -y systemctl enable --now fail2ban5. 节点部署与优化技巧5.1 低配VPS调优方案针对512MB-1GB内存的小鸡这套配置组合实测有效SWAP配置# 创建1GB的swap文件 dd if/dev/zero of/swapfile bs1M count1024 chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo /swapfile swap swap defaults 0 0 /etc/fstab # 调整swappiness echo vm.swappiness30 /etc/sysctl.conf sysctl -p内核参数优化# 开启BBR加速 echo net.core.default_qdiscfq /etc/sysctl.conf echo net.ipv4.tcp_congestion_controlbbr /etc/sysctl.conf sysctl -p5.2 节点安装常见错误重载resty配置失败这个错误困扰了我很久。最终发现是某些VPS厂商的CentOS 7镜像缺少关键依赖。解决方法要么换系统要么用这个万能DD命令重装# 适用于KVM架构的VPS wget -N --no-check-certificate https://raw.githubusercontent.com/veip007/dd/master/dd-od.sh chmod x dd-od.sh ./dd-od.sh # 选择CentOS 7.9版本6. 分线路解析实战配置6.1 运营商线路划分我的节点分配策略经过多次优化电信用户→ 东京节点IIJ线路联通用户→ 首尔节点LG U线路移动用户→ 香港节点CMI直连海外用户→ Cloudflare Saas解析配置截图示例线路组A电信优选 - 东京1号节点 权重70 - 新加坡节点 权重30 线路组B移动优选 - 香港节点 权重1006.2 智能容灾方案通过监控脚本实现自动切换#!/bin/bash # 节点健康检查 check_node() { curl -m 5 -o /dev/null -s -w %{http_code} http://$1:5000/status } # 主节点故障时切换流量到备用节点 if [ $(check_node primary_node_ip) -ne 200 ]; then curl -X POST http://主控IP:88/api/v1/node/switch \ -H Authorization: Bearer your_api_key \ -d {line:电信,origin:primary_node_ip,target:backup_node_ip} fi7. 备份与迁移方案7.1 自动化备份脚本我改进的备份方案包含三个维度数据库备份利用内置的定时任务配置备份每天打包关键配置文件增量备份通过rsync同步到异地服务器完整脚本示例#!/bin/bash # 每日3点执行 0 3 * * * root /usr/bin/cdnfly_backup.sh # 脚本内容 DATE$(date %Y%m%d) # 1. 备份数据库 cp /data/backup/cdn/mysql-$(date %Y%m%d)*.sql.gz /mnt/backup/cdnfly_db_${DATE}.sql.gz # 2. 备份配置 tar -zcvf /mnt/backup/cdnfly_conf_${DATE}.tar.gz \ /opt/cdnfly/master/conf \ /etc/hosts \ /usr/local/openresty/nginx/conf # 3. 同步到远程 rsync -avz --delete /mnt/backup/ backup_userremote_server:/cdnfly_backup/7.2 主控迁移经验迁移过程中最容易出问题的是Elasticsearch数据同步。我的经验是新旧主控并行运行不超过24小时迁移前先执行# 暂停所有定时任务 supervisorctl -c /opt/cdnfly/master/conf/supervisord.conf stop all # 手动触发ES数据刷新 curl -X POST http://localhost:9200/_flush/synced迁移完成后务必检查节点连接状态/node/list接口定时任务是否自动恢复流量统计是否连续这套方案我在三个不同环境迁移过最复杂的场景是从阿里云迁到AWS整个过程耗时约40分钟期间服务中断不到30秒。关键是要提前做好带宽测试大数据量迁移时建议先用内网传输。