注意: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简单很多.