ATS CDN 搭建

注意:ATS更重要的是CDN缓存能力,反向代理是其第二功能.

一般来说我们会用Nginx进行四层代理,也有人用HAProxy进行四层代理,实际上,ATS也是非常牛逼的工具,既然这么流行的工具,安装也是相当简单的.

apt install automake libtool pkg-config libmodule-install-perl gcc g++ libssl-dev tcl-dev libpcre3-dev libcap-dev libhwloc-dev libncurses5-dev libcurl4-openssl-dev flex autotools-dev bison debhelper dh-apparmor gettext intltool-debian libbison-dev libexpat1-dev libfl-dev libsigsegv2 libsqlite3-dev m4 po-debconf tcl8.6-dev zlib1g-dev
apt install trafficserver

所有配置文件都会在/etc/trafficserver目录内,修改records.config内容:

CONFIG proxy.config.http.server_ports STRING 8080 8080:ipv6

改成:

CONFIG proxy.config.http.server_ports STRING 80 443:ssl

他指示如何代理HTTP/HTTPS请求,还有很多选项可以Tweak,我具体改了这些,记住一切根据实际,并且配置文件都有连接指向文档.

CONFIG proxy.config.url_remap.pristine_host_hdr INT 0 # 转发时保留请求头
CONFIG proxy.config.http.cache.http INT 1 # 这一行以及下面全部都是用于缓存请求的.
CONFIG proxy.config.http.cache.ignore_client_cc_max_age INT 1
CONFIG proxy.config.http.normalize_ae_gzip INT 1
CONFIG proxy.config.http.cache.cache_responses_to_cookies INT 1
CONFIG proxy.config.http.cache.cache_urls_that_look_dynamic INT 1
CONFIG proxy.config.http.cache.when_to_revalidate INT 0
CONFIG proxy.config.http.cache.required_headers INT 2
CONFIG proxy.config.http.cache.ignore_client_no_cache INT 1

然后remap.config都配置了所有映射对.

redirect http://cnx.govpolybetul.org/ https://cnx.govpolybetul.org/
map https://cnx.govpolybetul.org/ https://www.cnx-software.com/
reverse_map https://www.cnx-software.com/ https://cnx.govpolybetul.org/
map / https://www.cnx-software.com/

最后还要设置缓存上限配置文件storage.config,默认是256M,而我硬盘充裕,我就给到20G吧.

/var/cache/trafficserver 20480M

最麻烦是下面,目前针对ATS竟然还没一键脚本签证书,所以只能用certbot的standalone模式或者手动证书,偷懒实验这次就先用手动证书了,准备了两个证书文件,分别是/etc/trafficserver/ssl/cnx.govpolybetul.org.key/etc/trafficserver/ssl/cnx.govpolybetul.org.crt

最后设置一下证书指向文件ssl_multicert.config,当然后端服务器不止1个时候,可以多粘贴很多行,还支持*通配符.

dest_ip=* ssl_cert_name=/etc/trafficserver/ssl/cnx.govpolybetul.org.crt ssl_key_name=/etc/trafficserver/ssl/cnx.govpolybetul.org.key

最后在线重载就可以了.

traffic_server start
 # 首次需要先启动
traffic_ctl config reload

由于服务器规模原因,也没法实测他和Nginx的差距,但是配置起来就比Nginx复杂太多了,而且版本更替还会导致各种配置不好用,真的很费劲,对于Nginx也是很容易实现静态代理的.

# 配置缓存区
http {
    # ...
    # /path/to/cache_path :缓存目录
    # levels=1:2 :表示缓存目录的第一级目录是1个字符,第二级目录是2个字符,如/path/to/cache_path/a/a0
    # keys_zone=cache1:1024m :缓存区名称及分配的内存大小
    # inactive=1d :缓存对象若1天内未被访问会被cache manager删掉
    # max_size=10g:表示该缓存区磁盘大小为10g
    proxy_cache_path /path/to/cache_path levels=1:2 keys_zone=cache1:1024m inactive=1d max_size=10g;
    # ...
}

server{
    # ...
    location ~ .(jpg|png|gif|jpeg)$ {
        proxy_pass http://{your_upstream};
        # 使用的缓存区
        proxy_cache cache1;
        # 缓存的键
        proxy_cache_key $host$uri$is_args$args;
        # 设置状态码为200和304的响应可以进行缓存,并且缓存时间为10分钟
        proxy_cache_valid 200 304 10m;
        # 客户端缓存30天
        expires 30d;
    }
    # ...
}

个人觉得Nginx简单很多.

发表评论

您的电子邮箱地址不会被公开。