市面已经有了七牛、又拍云、阿里云CDN、腾讯云CDN等免费和付费兼备的CDN服务,为什么还要自建CDN系统?一是第三方CDN费用太贵,以腾讯云CDN为列,国内流量+国外流量+国内请求次数+国外请求次数+https请求等,各种名目收费加起来一个月光CDN费用就不少。
二是第三方的CDN要求多,这里主要是指的域名。一般来说空间放在国外的网站对于CDN加速的需求强烈些,但是国内的CDN偏偏要BA域名才可以使用。倘若已经BA了,谁还会把空间放在国外的主机上?矛盾在此了,选择亚太节点的CDN又太贵,国内的CDN又不能用。
所以,自建CDN还是十分必要的,尤其是对于一个视频类和图片类的大流量网站,自建CDN可以帮助节省大量的建站成本。本篇文章就来分享一下香菇肥牛博主 原创的利用Apache Traffic Server一键安装配置高性能的CDN节点脚本。之前也介绍过了几次关于自建CDN系统的文章:Fikker-自建CDN系统加速服务器 如何建立Varnish CDN集群 Nginx 反向代理+缓存加速
一、ATS CDN加速使用介绍
网站:
- 官网:https://docs.trafficserver.apache.org/en/8.0.x/
- 脚本:https://github.com/Har-Kuun/OneClickCDN
Apache Traffic Server,简称ATS,由Yahoo于2009年开源,经过现在已经成为了非常成熟的Dai理/缓存/CDN系统,使用Traffic Server的CDN/大型网络有Apple, Comcast, Yahoo, Akamai, 以及国内的又拍云等。有兴趣的可以参考官方的文档研究研究。
二、一键安装配置CDN服务器
2.1 系统环境要求
目前支持Ubuntu 20.04 LTS, Debian 10, CentOS 7/8操作系统,CDN服务器正常运行时仅需要系统有500MB的内存。但是程序第一次编译安装的时候需要1500MB左右的内存。若您的VPS内存不够,可以加一些Swap。需要注意的是,该脚本需要安装在新装的操作系统中。
该程序和其他面板(比如宝塔,cPanel, Directadmin)等不兼容,为了可以达到最大的加速效果,建议选择大带宽和大流量的香港VPS、韩国VPS或者美国三网CN2 GIA VPS主机,这样无论是电信、联通还是移动网络用户,都可以获得最佳了访问体验。
2.2 一键安装CDN
一键安装配置CDN服务器只需要一行命令就可以。特别提醒:按照作者原话TLS 1.3 will NOT work on CentOS 7 because of old OpenSSL version,同时在 Ubuntu 18 上会出现 TLS1.2 不支持的情况,请选择其它的操作系统。
#原版(英文界面):
wget https://raw.githubusercontent.com/Har-Kuun/OneClickCDN/master/OneClickCDN.sh && sudo bash OneClickCDN.sh
#中文版:
wget https://raw.githubusercontent.com/Har-Kuun/OneClickCDN/master/translation/translated_scripts/OneClickCDN_zh-CN.sh && sudo bash OneClickCDN_zh-CN.sh
第一次运行时,程序会提示自动编译安装Apache Traffic Server。
安装好Apache Traffic Server后,接下来会让你选择配置缓存规则、内存缓存大小、磁盘缓存大小、是否想让Traffic Server缓存动态内容等等。如下图
以下是运维114的配置:
Traffic Server 安装成功!
Starting Apache Traffic Server: [ OK ]
Traffic Server 启动成功!
Created symlink from /etc/systemd/system/multi-user.target.wants/trafficserver.service to /etc/systemd/system/trafficserver.service.
配置Traffic Server...
您是否要设置默认的缓存规则? [Y/N]
y
配置缓存规则...
成功配置缓存规则。
配置缓存大小...
请输入内存缓存大小。
单位为M. 请输入一个整数值。
推荐值为200M每GB内存。
400
RAM缓存值已设置为 400M.
请输入磁盘缓存大小。
单位为M. 请输入一个整数值。
推荐值为至少2048M.
8000
磁盘缓存已设置为 8000M.
正在为磁盘缓存分区...
磁盘缓存分区成功。
配置header修改器...
header修改器已启用
您是否想让Traffic Server缓存动态内容? [Y/N]
y
更新缓存规则...
已更新缓存规则!
Traffic Server将缓存动态内容。
Would you like to enable "Access-Control-Allow-Origin" header (CORS)?
如果您不知道这是什么,请选择Y. [Y/N]
y
设置CORS信头...
CORS信头已添加!
The "server" header can be a short phrase, like "shc-cdn-server 1.0.0", or "Traffic Server 8.0.8".
If you do not change it, the default value is "ATS/8.0.8"
您想要更改吗? [Y/N]
n
Server信头字段未更改。
配置成功!
请开始下一步,添加第一个CDN网站。
三、添加和配置CDN加速网站
按照上面的方法,接下来就是添加和配置CDN加速网站了,你也可以重新运行命令:sudo bash OneClickCDN.sh
或者 sudo bash OneClickCDN_zh-CN.sh
,如下图:
一键脚本提供了列出当前所有CDN网站、高级缓存控制选项、添加一个CDN网站、为网站配置SSL、显示配置文件与日志文件路径、查看网站统计数据、续期Let’s Encrypt证书等等。如下:
请问您需要什么帮助呢?
1 - 列出当前所有CDN网站。
2 - 高级缓存控制选项
3 - 添加一个CDN网站。
4 - 为网站配置SSL.
5 - 显示配置文件与日志文件路径。
6 - 查看网站统计数据。
7 - 列出常用命令。
8 - 显示作者信息。
11 - 更改网站IP地址。
12 - 移除一个CDN网站。
13 - 重新配置 Traffic Server.
14 - 续期Let's Encrypt证书
0 - 保存所有修改并退出此脚本。
请选择 1/2/3/4/5/6/7/8/11/12/13/14/0:
3.1 做好域名解析
本步可选。如果你的源站用了SSL证书,一键安装配置高性能的CDN节点可以帮助你在CDN服务器上自动申请和配置Let’s Encrypt证书。你需要先将你的域名解析到CDN服务器上的IP上。
3.2 添加CDN域名
现在你可以添加CDN加速网站了,运维114的操作如下:
请问您需要什么帮助呢?
1 - 列出当前所有CDN网站。
2 - 高级缓存控制选项
3 - 添加一个CDN网站。
4 - 为网站配置SSL.
5 - 显示配置文件与日志文件路径。
6 - 查看网站统计数据。
7 - 列出常用命令。
8 - 显示作者信息。
11 - 更改网站IP地址。
12 - 移除一个CDN网站。
13 - 重新配置 Traffic Server.
14 - 续期Let's Encrypt证书
0 - 保存所有修改并退出此脚本。
请选择 1/2/3/4/5/6/7/8/11/12/13/14/0:
3
请输入您网站的域名(比如example.com):
xqt.io
请输入源站IP地址。如果源站有多个IP地址,可以填任意一个。
xx8.xxx.xxx.xxx
源站是否启用SSL?如果是HTTPS, 请输入1; 如果是HTTP, 请输入2.
1
为xqt.io添加映射规则...
已添加2条规则。
您是否想要现在为xqt.io配置SSL证书?
您可以提供您自己的证书;如果您已经将域名指向了该服务器的IP地址,您也可以一键生成免费的Let's Encrypt SSL证书。
请输入您的选项。
1: 我知道我的证书文件的路径(私钥,证书,CA中间链证书(可选)),我想提供我自己的证书。
2: 我已经将我的域名指向了该服务器的IP, 我想生成免费的Let's Encrypt证书。
3: 我不记得证书文件放在哪儿了,得去找找;或者我暂时不想为该域名设置SSL.
请选择 1, 2, or 3:
2
开始用Let's Encrypt生成免费SSL证书。...
该功能仍在实验阶段,请您知悉。...
关闭Traffic Server...
请输入一个邮箱地址:
[email protected]
Stopping traffic_manager: [ OK ]
Stopping traffic_server: [ OK ]
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
3.3 基本命令
配置、SSL、缓存规则、日志等路径如下:
General configurations: /etc/trafficserver/records.config
SSL: /etc/trafficserver/ssl_multicert.config
Mapping rules: /etc/trafficserver/remap.config
Cache rules: /etc/trafficserver/cache.config
Disk cache size: /etc/trafficserver/storage.config
Log files location: /usr/local/var/log/trafficserver
查看Traffic Server状态、重新加载Traffic Server配置、关闭重启Traffic Server基本命令如下:
View Traffic Server stats:
traffic_top
Start/stop/restart Traffic Server:
trafficserver start/stop/restart
Check whether Traffic Server is running:
trafficserver status
Decode via header:
traffic_via '[xXxXxX]'
Reload Traffic Server config files:
traffic_ctl config reload
四、ATS CDN加速效果体验
如何知道Apache Traffic Server是否生效呢?打开你的网站,用Chrome查看一下url返回头部,如果你在配置Apache Traffic Server自定义了"server" header
,这里就可以看到了,默认的是 "shc-cdn-server 1.0.0", or "Traffic Server 8.0.8".
通过运维114的测试体验来看,对于图片、视频、音频等静态资源比较多的网站的加速效果很明显。
另外,由于采用了香港CN2+BGP线路,Apache Traffic Server CDN服务器可以有效地改善美国CN2 VPS主机在晚上上网高峰期的移动和联通打开网站的速度。
通过查看CDN加速的数据,我们也可以看到缓存命中率等更多的信息。
五、ATS CDN IP与负载均衡
5.1 传递真实IP
动态内容能不能将用户IP传递给后端?在 records.config添加下面一行,然后重启ATS。
CONFIG proxy.config.http.insert_forwarded STRING for
5.2 Server header
想要修改server header,你可以重装配置Traffic Server,或者在/etc/trafficserver/header_rewrite.so里面加上,然后重启ATS :
cond %{SEND_RESPONSE_HDR_HOOK} [AND]
cond %{HEADER:server} =ATS/8.0.8
set-header server "NewServerName"
5.3 负载均衡
想要实现电信用户访问美国CN2 GIA,移动和联通访问香港或者韩国直连线路?搞三条线路的CDN服务器,然后到DNSPOD设置好线路解析即可。