新手指南

本文介绍如何利用CDN快速搭建一个简单的CDN服务。

1.了解CDN原理

CDN的全称是Content Delivery Network,即为内容分发网络,一个典型的CDN网络如下:

Index1.png

从上图可以看到:

  1. 不同区域或者不同网络的用户,可以通过DNS服务被分配到不同的边缘节点上;
  2. 边缘节点如果已经缓存内容,可以就近直接向用户发送内容;如果还没有缓存内容,则一级一级网上找,直至去源站(即内容提供原始的站点)去获取内容,然后再一级一级返回,直至发送给用户;
  3. 由于边缘节点可以缓存内容,所以可以有以下几个优点:
    1. 降低了网络延时,加速了内容的分发,因为用户可以就近获取内容,就无需跨多个网络千里迢迢访问最原始的服务器;
    2. 大幅降低源站压力,通过边缘节点的分担,源站通常可以减少绝大部分访问;
    3. 增加数据传输的可靠性,因为每个边缘节点都可以独立发送内容,即使源站服务器宕机,也不会影响内容的访问;
    4. 增强了源站的安全性,当遭遇大规模类似于DDOS的攻击时,可以通过边缘节点有效减少到源站的流量,也可以在边缘节点增加防御规则(比如WAF),让攻击的流量无法到达源站,从而提升了源站的安全性。

在CDN中,为了简化网络结构,我们暂时没有提供中心节点和区域节点,但是提供了L2节点(也叫汇聚回源节点,仅商业版可用),所以CDN的网络结构如下:

Index2.png

2. Why FlexCDN?

在业界,很多人都选用Squid、HAProxy、Nginx等工具作为CDN服务应用程序,那么为什么要选择CDN呢?诚然这些都是非常优秀的工具,但是CDN相对于它们在某些地方仍然有一些明显的优势:

  • 完整的管理界面 - 可以通过管理界面操作一切功能,无需使用代码,为我们节省了记忆负担,也减少了出错的机会;
  • 安装简单 - 得益于我们发布的程序都是编译好的二进制文件,即使是一个技术小白也可以轻松安装、启动,无需安装额外的系统库,上传、解压、启动可以一气呵成;
  • 完整的解决方案 - 不仅仅包含CDN加速、Web服务,还包含了多租户(用户)、日志、监控、安全(WAF)、DNS等功能;
  • 容易集成到别的系统 - 所有数据都通过GRPC操作,第三方系统可以轻易通过GRPC同CDN通讯;
  • 更容易二次开发 - 基于Go语言的CDN,相对于其他C语言的应用来说更加容易二次开发,入门也相对更加简单,只需花一些时间学习Go语言即可上手。

3. 安装CDN

如果你还没有安装CDN管理平台,可以在这里查看 安装管理平台 的方法。

4. 创建集群

集群是一组边缘节点的组合,即可以通过集群集中管理一组节点,当我们想发布新的网站的时候,也需要选择对应的集群,这样集群里的节点才会启动网站。

在管理员系统安装完毕后,会自动创建一个”默认集群”,通常直接使用这个集群即可。

如果你想创建新的集群,可以点击左侧”边缘节点”菜单中,然后点击页面中的”创建集群”,就可以创建新的集群了。

5. 创建节点

一个集群只有添加并安装节点后才能工作,节点负责处理和响应实际的用户请求。

节点通常安装在和管理平台不一样的服务器上,但如果你的服务器资源有限,也可以放在同一个服务器上。

在”集群列表”中点击集群详情,即可进行节点列表,类似于:

Index3.png

点击上方的”创建节点”菜单进入创建新节点页面:

Index4.png

其中:

  • 节点名称 - 可以填写任何名称,只要方便我们识别即可
  • IP地址 - 节点服务器对外访问的地址,可以有多个,可以是IPv4(常规的IP),也可以是IPv6

其余参数都可以暂时不填写,点击页面下方的”下一步”,进入安装节点界面:

Index5.png

你可以选择使用SSH远程安装,也可以选择页面中的“手动安装”(在这里 查看手动安装更多帮助。):

Index6.png

完成安装后:如果顺利的话,节点安装成功后,在节点列表中就能看到运行状态:

Index7.png

6. 创建网站

在集群、节点都准备就绪后,就可以将网站发布到这些节点上,点击左侧”网站列表”菜单,然后再页面中点击”创建网站”,即可创建新的网站:

Index8.png

其中:

  • 所属用户 - 可以为网站指定一个用户,我们刚开始使用的时候可以不选
  • 部署的集群 - 需要将当前网站部署到的集群,集群中必须已经安装了节点
  • 绑定端口 - 通常只需要绑定HTTP 80端口和HTTPS 443端口即可
  • 绑定域名 - 在设置好域名解析后,可以通过绑定的域名可以访问网站,这里也支持*.example.com类似的域名
  • HTTPS证书 - 如果想支持HTTPS的话,需要上传证书,但可以在创建网站后再添加
  • 源站地址 - 可以添加需要被加速的源站地址,通常是IP+端口,如果你没有填写端口,则系统会自动判断并加上对应的端口号

点击”保存”后,网站即可创建完毕:

Index9.png

添加完毕后,可以通过节点IP直接访问试试能否访问网站。

7. 手工解析域名

在网站添加完毕后,可以在第三方域名管理平台将域名A记录解析到节点IP上,如果有多个节点,可以添加多个A记录,通常可以在为不同的节点对应的A记录选择不同的线路。

等待解析生效后,就可以通过域名访问我们创建的网站了。

8. 自动解析域名

对于大规模的CDN来说,手工来管理域名解析确实费时费力,我们在系统中也提供了自动域名解析功能,请在稍微熟悉系统后,点击左侧菜单中的”域名解析”,可以通过比较完善的互动窗口来设置你的自动解析。

关于自动解析域名的帮助可以点击 这里 查看。

9. 测试

可以通过域名或者节点IP来访问网站,来查看网站访问是否有问题,如果有任何异常,请查看本页面中的”问题诊断”一节。

10. 问题诊断

一个网站无法访问有很多原因,但是通常都有规律可循,请依次做以下检查:

  1. 确保集群的所有节点都在正常工作,可以在集群详情中查看节点状态
  2. 在管理界面”边缘节点”菜单中,点击”运行日志”,查看节点是否有异常,通常可能有以下几个异常:
    • 端口绑定失败 - 端口号或者地址输入错误,这种情况通常只需要输入端口号即可,不需要填写地址
    • 端口已经被使用 - 端口被其他服务所占用,比如nginx已经监听了80端口,所以节点无法重新监听,这种情况下,请将其他正在监听此端口的网站关闭
    • 其他的网站访问异常,请根据提示进行对应的操作
  3. 如果在浏览器中域名无法访问,检查域名解析是否已经生效,可以通过 ping 命令来确认域名已经解析到对应的节点上,类似于:
    ping example.cn
  4. 如果端口无法连接,使用SSH登录节点所在服务器,然后通过 netstat 检查端口是否已经已经监听:
    netstat -an|grep 80|grep LISTEN
    netstat -an|grep 443|grep LISTEN
    如果某个端口号没有被监听,说明你在网站里填写的”绑定端口”是不正确的,常见的还有只填写了HTTPS端口,但是没有上传HTTPS证书;或者有一些用户HTTP和HTTPS的端口号弄混,也会导致端口无法连接。
  5. 检查防火墙设置:可以检查服务器端防火墙是否放行了对应的端口

11. 问题反馈

如果你在安装或者使用过程中出现任何问题,可以在 社区页面 找到我们的联系方式,随时欢迎反馈。