使用服务器自建CDN

相关说明

由于有些商用CDN费用比较贵,或者其它原因,导致我们只能弃用商用CDN;不过我们可以自建CDN,虽然没商用CDN方便,但成本可以控制下来,有得有失,具体怎么选择看个人需求了。

适用场景

1、直接给整个高级版或纯净版程序做CDN加速
2、只给高级版或纯净版的切片做CDN加速,然后拿来给程序提供分发

准备工作

既然是自建CDN,那么我们需要准备一台网络比较好的服务器,不然自建就没意义了。

在选择服务器的时候,如果想上传/访问效果好,则需要从线路下手,且同一个服务器线路对联通、电信、移动的效果都不一样,可以在购买前先了解服务商网络情况,并索取测试ip进行相关测试,不知道怎么测试的,可直接访问:https://tools.ipip.net/ping.php ,ping下测试ip,查看丢包情况,丢包频率少的,表示线路相对好些,且只测试晚上,晚上才能看出好坏。

当然网络好的前提下,带宽也要足,毕竟用来跑视频;只要服务器达到以上2点要求,则很适合拿来自建CDN

开始自建CDN

提示:以下均在拿来自建CDN的服务器上操作。

1、安装宝塔面板

提示:下面分别提供宝塔国内/国际2个版本安装,区别是宝塔国内版需要强制登录宝塔账号,而国际版不需要,可自行选择安装 

使用SSH客户端登录服务器,使用命令:

#CentOS系统,国内版本
yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec
#CentOS系统,国际版本
yum install -y wget && wget -O install.sh http://www.aapanel.com/script/install_6.0_en.sh && bash install.sh aapanel

#Debian系统,国内版本
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh ed8484bec
#Debian系统,国际版本
wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && bash install.sh aapanel

#Ubuntu系统,国内版本
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec
#Ubuntu系统,国际版本
wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && sudo bash install.sh aapanel

安装完成后,会给你宝塔登录信息,保存好就行。

2、安装Nginx

点击宝塔面板左侧 ⇒ 软件商店 ⇒ 找到Nginx安装即可。

3、绑定域名

提示:此域名为CDN域名,可自行选择。

先解析域名的A记录到服务器ip,然后点击宝塔面板左侧 ⇒ 网站 ⇒ 添加站点,只需要填写域名,其它默认就行,如图:

4、配置CDN

点击宝塔面板左侧 ⇒ 软件商店 ⇒ 找到Nginx ⇒ 点击设置,配置修改,如下:

#在http{}里面加入以下代码
proxy_cache_path /www/wwwroot/www.efvcms.com levels=1:2 keys_zone=efv:500m inactive=1d max_size=50g;

主要参数如下:

proxy_cache_path /www/wwwroot/www.efvcms.com 后面路径为缓存目录,可自行修改,比如你CDN域名根目录
keys_zone=efv:500m efv为缓存的名字,可不变;后面500m为内存缓存空间,自行根据内存大小适当进行修改
inactive=1d 为一定时间内没人访问的资源缓存清空时间,如1d,也就是1天没有被访问的内容自动清除,10天可设置为10d
max_size=50g 为最大缓存空间,可根据硬盘大小自行设置

如图:

接下来再点击域名右侧设置按钮,点击配置文件,加入以下代码:

location /
{
    proxy_pass http://185.172.165.11:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_cache efv;
    proxy_ignore_headers cache-control;
    proxy_cache_key $host$uri$is_args$args;
    add_header Nginx-Cache $upstream_cache_status;
    proxy_cache_valid 200 304 30m;
    proxy_cache_valid 301 24h;
    proxy_cache_valid 500 502 503 504 0s;
    proxy_cache_valid any 1s;
    proxy_cache_min_uses 1;
    expires 12h;
}

主要参数如下:

proxy_pass http://185.172.165.11:3000 后面地址为需要加速的地址,可直接修改为转码服务器的访问地址,如ip:3000
proxy_cache efv 后面的efv为之前设置的缓存名称,也就是直接引用该缓存名称的配置

如图:

然后删除配置文件里面的这几行代码,不然jsjpg等文件缓存不了,代码如下:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log off;
    access_log /dev/null;
}

location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log off;
    access_log /dev/null; 
}

最后基本上设置好了,然后此时我们访问CDN域名后,数据会根据缓存配置,缓存到设置的缓存目录。

注意如果这里设置不生效,记得点击宝塔面板左侧 ⇒ 软件商店 ⇒ 找到Nginx,重启下Nginx即可。

相关提示

有些服务器流量有限,且双向计算,所以这里需要将最大缓存空间设置尽量大点,这样缓存一次后,资源最大化从cdn服务器拉取,而不需要额外从源站拉取资源,节约流量。