记录一次Apache Traffic Server部署
本文最后更新于 675 天前,其中的信息可能已经有所发展或是发生改变。

众所周知因为网络的原因,我们需要优化线路来保障网站的访问速度。由于各种原因直接将站点部署在优化线路的机子上并不合适,我们希望能够部署在海外的稳定、大流量、大宽带的机子上,这就需要使用有优化线路的机子做流量中转了。最简单的方法是直接用nginx反代,但出于性能考虑,我决定使用Apache Traffic Server,下面来记录一次Apache Traffic Server部署过程。

由于穷,我只有一台1H512M10G硬盘的小鸡可以用来中转,不过这个配置也完全够了,撑得住。编译需要至少1.5G的内存,运行512M足矣,不过还是推荐多留出来512M内存以防万一。

我这小鸡系统是debian10,想着反正是折腾,就装到debian11吧。(可跳过,仅个人折腾)

第一部分:debian10更新debian11

首先更新系统包

apt update && apt upgrade -y
apt update && apt upgrade -y

然后更新sources.list 文件,将/etc/apt/sources.list中的内容全部注释掉,在尾部写上

deb http://deb.debian.org/debian bullseye main
deb-src http://deb.debian.org/debian bullseye main

deb http://deb.debian.org/debian-security/ bullseye-security main
deb-src http://deb.debian.org/debian-security/ bullseye-security main

deb http://deb.debian.org/debian bullseye-updates main
deb-src http://deb.debian.org/debian bullseye-updates main

保存后执行

apt update && apt full-upgrade

这个过程需要一点时间,期间有几次需要手动操作,需要人盯着

升级完成后执行reboot重启

此时就已经升级好了,可以放心的去删除apt缓存

apt --purge autoremove
apt autoclean

第二步,才是真正的编译安装Apache Traffic Server(重点)

第二部分:编译安装Apache Traffic Server

首先去https://trafficserver.apache.org/downloads下载最新版的程序,我发文时版本是9.1.1,执行

wget https://dlcdn.apache.org/trafficserver/trafficserver-9.1.1.tar.bz2

然后解压

tar -jxvf /root/trafficserver-9.1.1.tar.bz2

接着准备依赖,按照官网说明,需要如下:

  • pkgconfig
  • libtool
  • C++ compiler (gcc >= 4.3 or clang > 3.0)
  • GNU make
  • OpenSSL or BoringSSL
  • pcre
  • libcap
  • flex (for TPROXY)
  • hwloc
  • lua
  • zlib
  • curses (for traffic_top)
  • curl (for traffic_top)

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

如果你的内存跟我一样不足2G,就先加swap,内存够的话直接跳过这一步

创建1.5G的交换文件(量力而行)

sudo fallocate -l 1.5G /swapfile

更改权限

sudo chmod 600 /swapfile

设置交换分区

sudo mkswap /swapfile

激活交换文件

sudo swapon /swapfile

这个时候swap就加好了,现在有2G的内存,编译够了

按照官方文档,执行下面编译命令

cd trafficserver/
./configure --enable-experimental-plugins
make
make install

上面如果./configure提示无权限,就

chmod +x ./configure

编译需要挺久的,会消耗大量的时间,当然也是看机子性能,像我的这种垃圾小鸡就是几个小时的无尽等待了。

为了方便管理,创建一个链接

ln -s /usr/local/etc/trafficserver /etc/trafficserver

编译完成后,这些swap分区就用不到了,毕竟我的硬盘也严重吃紧,现在要把这1.5G的swap释放掉,重新更改为512M,如果你前面没有分配swap,这一步忽略,直接进入到配置环节。

swapoff  /swapfile
rm -rf /swapfile
sudo fallocate -l 500M /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

为了永久保留这个swap,还需要编辑/etc/fstab文件

sudo nano /etc/fstab

底部添加一行

/swapfile swap swap defaults 0 0

第三部分:配置Apache Traffic Server

我是要用Apache Traffic Server做cdn功能,想让用户强制https访问,所以先申请ssl证书。这里使用acme.sh配合dnspod做自动化部署。先安装acme.sh

curl  https://get.acme.sh | sh
alias acme.sh=~/.acme.sh/acme.sh

添加dnspod的api秘钥(记得白名单要设置好,秘钥只会显示一次,一定要记住,看清楚是dnspod的api而不是腾讯云)

export DP_Id="your id"
export DP_Key="your key"
export ACCOUNT_EMAIL='your_email'

申请证书,将test.com替换为你的域名

acme.sh --issue --dns dns_dp -d test.com

申请成功后,安装证书,test.com替换为你的域名,路径可以自己更改,但是要记住

acme.sh --installcert -d test.com \
--key-file /etc/trafficserver/ssl/test.private.key \
--fullchain-file /etc/trafficserver/ssl/test.fullchain.cer  \
--reloadcmd "traffic_ctl config reload"

执行到这里时,ssl就已经配置好了,acme.sh会自动更新你的证书,上面reloadcmd中的命令是让Apache Traffic Server重新载入配置,确保能加载更新后的ssl证书。这里执行的时候reload操作时肯定会报错的,没有关系,后面再解决。

推荐开启acme.sh的自动更新,保持脚本为最新版本

acme.sh --upgrade --auto-upgrade

接着配置Apache Traffic Server,在 /etc/trafficserver/ 里面找到配置文件

配置remap.config,test.com为你的域名,ip为源站ip。如果您的源站未启用https,那就将443端口改为80

redirect http://test.com/ https://test.com/
map https://test.com/ https://88.88.88.88:443/

打开records.config,配置缓存,确保下面的配置是正确的

CONFIG proxy.config.reverse_proxy.enabled INT 1
CONFIG proxy.config.url_remap.remap_required INT 1
CONFIG proxy.config.url_remap.pristine_host_hdr INT 1
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

cache.config里设置缓存期限

url_regex=.* suffix=js ttl-in-cache=5d
url_regex=.* suffix=css ttl-in-cache=5d
url_regex=.* suffix=html ttl-in-cache=5d
url_regex=.* suffix=xml ttl-in-cache=5d
url_regex=.* suffix=ts ttl-in-cache=5d
url_regex=.* suffix=jpeg ttl-in-cache=5d
url_regex=.* suffix=mp4 ttl-in-cache=5d
url_regex=.* suffix=zip ttl-in-cache=5d
url_regex=.* suffix=gif ttl-in-cache=5d
url_regex=.* suffix=jpg ttl-in-cache=5d
url_regex=.* suffix=swf ttl-in-cache=5d
url_regex=.* suffix=m3u8 ttl-in-cache=5d
url_regex=.* scheme=https ttl-in-cache=1h
url_regex=.* scheme=http ttl-in-cache=1h

编辑records.config,启用内存缓存

CONFIG proxy.config.cache.ram_cache.size INT 200M
CONFIG proxy.config.cache.ram_cache_cutoff INT 4194304
CONFIG proxy.config.cache.ram_cache.compress INT 1

编辑文件storage.config, 设置缓存大小,我的硬盘有限,就启用3GB缓存

var/trafficserver 3072M

编辑文件volume.config,设置缓存分区

volume=1 scheme=http size=5%
volume=2 scheme=http size=5%
volume=3 scheme=http size=15%
volume=4 scheme=http size=15%
volume=5 scheme=http size=25%
volume=6 scheme=http size=35%

编辑records.config,开启ssl支持

在含有server_ports这行里,将整行改为

CONFIG proxy.config.http.server_ports STRING 80 443:proto=http2;http:ssl

并且指明ssl路径,这个路径就是上面acme.sh安装证书的路径

CONFIG proxy.config.ssl.server.cert.path STRING /etc/trafficserver/ssl/
CONFIG proxy.config.ssl.server.private_key.path STRING /etc/trafficserver/ssl/

编辑ssl_multicert.config,指明具体的ssl证书

dest_ip=88.88.88.88 ssl_cert_name=test.fullchain.cer ssl_key_name=test.private.key

编辑records.config,开启OCSP装订

CONFIG proxy.config.ssl.ocsp.enabled INT 1

编辑plugin.config,自定义HTTP header

header_rewrite.so /etc/trafficserver/header_rewrite.config

新建 header_rewrite.config 并编辑,“your-cdn-server”替换为您自己的内容,ATS/9.1.1是版本号,如果您使用的不是这个版本,那么就需要改为你所使用的版本

cond %{SEND_RESPONSE_HDR_HOOK}[AND]
cond %{HEADER:server} =ATS/9.1.1
set-header server "your-cdn-server"

编辑records.config,开启拥塞控制

CONFIG proxy.config.cache.enable_read_while_writer INT 1
CONFIG proxy.config.http.background_fill_active_timeout INT 0
CONFIG proxy.config.http.background_fill_completed_threshold FLOAT 0.000000
CONFIG proxy.config.cache.max_doc_size INT 0
CONFIG proxy.config.cache.read_while_writer.max_retries INT 10
CONFIG proxy.config.cache.read_while_writer_retry.delay INT 50
CONFIG proxy.config.http.cache.max_open_read_retries INT 5
CONFIG proxy.config.http.cache.open_read_retry_time INT 10

重载配置并重启Apache Traffic server

trafficserver start
ldconfig
traffic_ctl config reload
trafficserver restart

配置完成,在有访客访问后,可以查看统计数据。如果没有访问直接执行下面命令会报错。

查看单个网站使用

traffic_logstats -o 88.88.88.88:443

查看服务器运行状态使用

traffic_top

此时整个过程就配置完成了。注意:Apache Traffic Server不会开启自启动,如果您重启了服务器,请重新执行一次

trafficserver start

参考网站:

https://qing.su/article/traffic-server-reverse-proxy.html
https://qing.su/article/traffic-server-cdn-cluster.html
-=||=-收藏

评论

  1. 啦啦啦
    Windows Firefox 103.0
    2 年前
    2022-8-14 14:53:37

    东西不错,很有用

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇