说明:
- 本测试基于Ubuntu
- 本测试基于nginx + squid
- 两个服务器:源服务器(web对外服务器)、缓存服务器(cdn服务器)
一、什么是CDN?
CDN(Content Delivery Network)是指内容分发网络,也称为内容传送网络。通过广泛的网络节点分布,提供快速、稳定、安全、可编程的全球内容分发加速服务,可以将静态资源文件(html静态页面,js,css,图片,音视频,文件等)内容分发至接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。
简单说就是用户访问一些静态资源时,使用了CDN后就不会从源服务器上去获取了,而是通过计算,找出距离当前用户最近的CDN服务,返回数据。
二、为什么要用CDN?
比如我们要做一个 商城、视频播放、文件下载 这些类型的网站,里面会包含大量的静态资源文件,而且文件还很大,所以这些网站9成以上网络流量是耗费在静态资源上。如果不做CND优化加速,那么网页加载会消耗源服务器大量的带宽,用户在使用的时候可能会遇到资源迟迟加载不完或者网络中断等一系列问题,所以对于这些类型的网站,做CDN优化加速是非常重要的。
三、CND的优点
- 用户访问静态资源时从距离最近的CDN服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻源站点WEB服务器负载等 功能
相当于是一个跨地区的负载均衡,全球各地的CDN服务器, 都在为源站服务器分担访问压力 - 本地Cache加速,快速响应
本地用户访问本地CDN服务器,不需要访问远处的源站服务器,通信距离短了,自然响应快速 - 集群抗攻击:广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵以及降低各种DDoS攻击对网站的影响,同时保证较好的服务质量。
- 镜像服务:能够消除不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量。
比如用户用的联通网络,访问电信网络的源站web服务,会跨运营商,访问线路会先到达联通顶层主干网络,再分发到电信顶层主干网络,最后到达源站服务器,这一过程是很漫长的。如果部署了联通的CDN服务器,那么联通用户访问就会直接从距离最近的联通CDN上获取数据了,速度自然提升很多。 - 节省骨干网带宽,减少带宽需求量
四、搭建CDN服务
CDN可以直接在服务商平台付费购买,比如:阿里云、腾讯云、百度云等。这个没啥好说的,这里主要讲下自己搭建CDN。
这里用到两台ubuntu的服务器来演示搭建过程
第一台服务器做源站web服务器,需要部署 nginx 和一些静态资源文件
第二台服务器做CDN服务器,需要部署 nginx 和 squid(高性能的缓存服务器,可以单独放在别的服务器上)
4.1 源站服务器配置
4.1.1 安装nginx并启动
yum install nginx
service nginx start
说明:此时源服务器上可部署启动web应用,并配置域名解析。配置好nginx域名端口映射
我的web服务端口域名映射配置如下图所示:
4.2 CDN服务器配置
4.2.1 nginx安装与启动(与源服务器安装一致,省略.......)
4.2.2 编辑nginx配置
nano /etc/nginx/nginx.conf
server {
listen 80;
server_name xxx.xx.xyz;
root /html;
location / {
proxy_pass http://127.0.0.1:3128; #填写squid服务器的IP和端口,3128是squid默认端口
}
}
4.2.3 安装squid并编辑配置文件
4.2.3.1 安装squid
apt install squid
4.2.3.2 编辑配置
nano /etc/squid/squid.conf
#缓存配置
http_access allow localhost
http_access allow all
#配置squid端口
http_port 3128 accel vhost vport
#增加这一行配置,表示CDN上没有缓存数据时从哪去拉取数据,IP就是源站的IP,端口也是一样
cache_peer 172.22.0.12 parent 9999 0 originserver
cache_mem 1024 MB
cache_dir ufs /var/spool/squid 1024 16 256
cache_log /var/log/squid/cache.log
coredump_dir /var/spool/squid
我的配置如图:
4.2.3.3 启动
service squid start
五、测试
在源站上新建test.js文件,然后用CDN的IP去访问这个文件,发现也可以打开,证明搭建及配置没有问题
这是直接访问源服务器
六、配置域名解析
通过上边的操作,成功的搭建了CDN服务器,但是还差一步,就是域名解析。上边直接访问CDN的IP加文件名可以获取到源站的数据,但是实际操作中我们不会直接访问CDN的IP或者域名,而是访问的源站的IP或域名,所以还需要将源站域名解析到CDN服务器的域名,这样才会在实际访问中生效(请求源站域名就会自动解析到就近的CDN服务器)
大致讲一下,就是用 CNAME 将源站域名指向CDN域名:
6.1 域名网站配置(添加解析记录)
6.2 cdn服务器的nginx配置
说明:nginx配置更改之后都要重启,所有配置才能生效。重启命令是:service nginx restart
七、squid
Squid是一个高性能的代理缓存服务器,它的作用就是被访问时可以向配置的源站地址获取数据并且缓存起来,如果缓存的文件发生了变化squid也会自动更新的。
正因为squid性能高,而且好用,安装配置很简单,所以用它来构建CDN加速,也是当前比较主流的软件。