Apache Traffic Server 10.2.0 配置参数详解
本文系统讲解 Traffic Server 10.2.0 配置:records.yaml 语法与点分参数映射、storage.config 与 remap.config 写法、核心参数实测默认值、热加载规则与生产模板,均经真实环境验证。
Apache Traffic Server 10.2.0 配置参数详解
一、环境信息
| 项目 | 内容 |
|---|---|
| 组件版本 | Apache Traffic Server 10.2.0 |
| 安装前缀 | /opt/ats(源码 CMake 构建,同款参数适用于其他前缀) |
| 配置目录 | /opt/ats/etc/trafficserver |
| 主配置文件 | records.yaml(ATS 10 起 YAML 格式,取代 records.config) |
| 运行方式 | systemd 单元 trafficserver,User=ats |
| 实测系统 | Ubuntu 22.04 与 CentOS 8(参数值两系统一致) |
二、前置条件
- 已按官方源码方式安装 ATS 10.2.0 并能通过 systemctl 正常启停(安装过程见对应系统安装指南)。
- traffic_ctl 命令可用(JSONRPC 正常,执行 traffic_ctl server status 返回 initialized_done 为 true):
/opt/ats/bin/traffic_ctl server status | head -c 80
{"initialized_done": "true", "is_ssl_handshaking_stopped": "false", "is_draining": "false",
- 修改配置前备份 /opt/ats/etc/trafficserver/ 目录:
cp -a /opt/ats/etc/trafficserver /opt/ats/etc/trafficserver.bak
三、参数查看与修改方式
3.1 查看当前生效值
单值或批量查询(点分参数名):
/opt/ats/bin/traffic_ctl config get proxy.config.http.server_ports proxy.config.http.cache.http
proxy.config.http.server_ports: 8080 8080:ipv6
proxy.config.http.cache.http: 1
按正则匹配查询:
/opt/ats/bin/traffic_ctl config match 'proxy.config.http.keep_alive'
查看某参数的元信息(类型、默认值、生效方式):
/opt/ats/bin/traffic_ctl config describe proxy.config.http.server_ports
name : proxy.config.http.server_ports
current value : 8080 8080:ipv6
default value : 8080 8080:ipv6
record type : CONFIG
data type : STRING
update type : static, restart traffic_server
source : administratively set
重点看 update type 字段:标记为 static 的参数修改后必须重启服务;其余参数 config reload 即可生效。
3.2 修改参数的三条规则
规则一:持久化修改必须编辑 records.yaml。traffic_ctl config set 只改运行时值,实测它不会写回配置文件,重启后即丢失。
规则二:records.yaml 使用嵌套 YAML,点分参数名按层级展开。例如 proxy.config.http.server_ports 写为:
records:
http:
server_ports: 8080 8080:ipv6
规则三:修改后按 update type 决定 reload 还是 restart。可热生效的参数执行:
/opt/ats/bin/traffic_ctl config reload
✔ Reload scheduled [rldtk-1791787708884]
Monitor : traffic_ctl config reload -t rldtk-1791787708884 -m
reload 结果查询:
/opt/ats/bin/traffic_ctl config status
✔ Reload [success] — rldtk-1791787708884
Started : 2026 Oct 12 06:38:56.637
Finished: 2026 Oct 12 06:38:56.643
Duration: 6ms
reload 并非即时完成,返回提示等待约 10 秒同步;需要重启的参数执行 systemctl restart trafficserver。
3.3 配置合法性校验
任何修改重启前先校验:
/opt/ats/bin/traffic_server -C verify_config
无报错输出即通过;YAML 语法错误会在 records parsing 阶段直接报行号。
四、参数总览
records.yaml 默认文件(10.2.0 安装自带)的顶层结构与关键默认值:
| 点分参数名 | YAML 位置 | 默认值 | 说明 |
|---|---|---|---|
| proxy.config.http.server_ports | http.server_ports | 8080 8080:ipv6 | 监听端口 |
| proxy.config.http.cache.http | http.cache.http | 1 | HTTP 缓存总开关 |
| proxy.config.http.insert_response_via_str | http.insert_response_via_str | 0 | Via 响应头 |
| proxy.config.url_remap.remap_required | url_remap.remap_required | 1 | 必须命中 remap 规则 |
| proxy.config.cache.ram_cache.size | cache.ram_cache.size | -1 | 内存缓存自动 |
| proxy.config.cache.ram_cache_cutoff | cache.ram_cache_cutoff | 4194304 | 4MB 以上对象不进内存缓存 |
| proxy.config.cache.threads_per_disk | cache.threads_per_disk | 8 | 每存储磁盘线程 |
| proxy.config.cache.limits.http.max_alts | cache.limits.http.max_alts | 5 | 单 URL 变体上限 |
| proxy.config.cache.min_average_object_size | cache.min_average_object_size | 8000 | 对象平均大小估计 |
| proxy.config.diags.debug.enabled | diags.debug.enabled | 0 | 调试日志 |
| proxy.config.log.logging_enabled | log.logging_enabled | 3 | 事务日志开关 |
| proxy.config.log.rolling_enabled | log.rolling_enabled | 1 | 日志滚动 |
| proxy.config.log.rolling_interval_sec | log.rolling_interval_sec | 86400 | 滚动间隔 |
| proxy.config.log.rolling_size_mb | log.rolling_size_mb | 10 | 单文件大小滚动阈值 |
| proxy.config.exec_thread.autoconfig.scale | exec_thread.autoconfig.scale | 1 | 网络线程自动配置比例 |
| proxy.config.accept_threads | accept_threads | 1 | accept 线程数 |
五、核心参数分类详解
5.1 网络与监听参数
proxy.config.http.server_ports(http.server_ports,static,需重启)
监听端口与选项,空格分隔多个监听描述。默认 8080 8080:ipv6 表示 IPv4 与 IPv6 各监听 8080。实测修改为 8081 8081:ipv6 并重启后,ss 显示两个协议栈均在 8081 监听。常用选项后缀::ipv4 强制 IPv4、:ssl 挂接 TLS、:transparent 透明代理、:fdb 完全动态端口。生产反向代理常见写法(80 与 443 同进程):
records:
http:
server_ports: 8080 8443:ssl
proxy.config.net.connections_throttle(net.connections_throttle,实测默认 30000)
全局并发连接节流上限,涵盖客户端与回源连接。高并发网关建议按内存调至 100000 以上,并同时同步 systemd 的 LimitNOFILE。
proxy.config.accept_threads(accept_threads,默认 1)
独立 accept 线程数,0 表示由网络线程自行 accept。短连接风暴场景可增至 2。
5.2 缓存行为参数
proxy.config.http.cache.http(http.cache.http,默认 1,可热生效)
HTTP 缓存总开关。置 0 后 ATS 退化为纯反向代理(不落盘),适合灰度切换。
proxy.config.http.cache.required_headers(http.cache.required_headers,实测默认 2)
缓存所需的响应头约束:0 表示无头也可缓存,1 表示需要 Last-Modified 或 ETag,2 表示需要显式过期头或默认 TTL 启发。反向代理场景保持默认 2 最安全。
proxy.config.http.cache.heuristic_min_lifetime(默认 3600 秒)、heuristic_max_lifetime(默认 86400 秒)、heuristic_lm_factor(默认 0.1)
无显式过期信息时的启发式 TTL 三元组:以对象年龄乘以 lm_factor 估算,并夹在 min 与 max 之间。静态资源占比高的站点可把 max 提高到 604800(7 天)。
proxy.config.http.cache.max_stale_age(实测默认 604800 秒)
对象过期后仍可作为陈旧内容服务的最长时间(配合 must-revalidate 策略)。
proxy.config.cache.ram_cache.size(cache.ram_cache.size,默认 -1)
内存缓存字节数,-1 表示按存储总量自动(约存储的十分之一)。固定值按字节写,例如 4294967296 为 4GB。内存缓存不落盘,重启即空。
proxy.config.cache.ram_cache_cutoff(默认 4194304 字节)
超过该大小的对象直接绕过内存缓存只写磁盘,避免大对象挤占热点小对象。实测默认 4MB。
proxy.config.cache.limits.http.max_alts(默认 5)
同一 URL 最多缓存的变体数量(按 Vary 区分)。
5.3 回源与连接参数
proxy.config.http.connect_attempts_max_retries(实测默认 3)
回源连接失败重试次数。配 parent.config 多级缓存时适当加大。
proxy.config.http.connect_attempts_timeout(实测默认 30 秒)
建立回源 TCP 连接的超时。
proxy.config.http.down_server.cache_time(实测默认 60 秒)
源站被判定宕机后,故障状态在本地记忆的时长,期间新请求不再尝试该源站。
proxy.config.http.keep_alive_no_activity_timeout_in 与 out(实测默认均为 120 秒)
客户端与源站两侧 keep-alive 空闲超时。
proxy.config.http.transaction_active_timeout_in(默认 900 秒)
单事务最长时间,防慢速攻击占连接。
proxy.config.http.origin_max_queue_delay
回源排队最大延迟毫秒数,0 表示关闭;配合 parent 选路可削峰。
5.4 日志参数
proxy.config.log.logging_enabled(log.logging_enabled,默认 3)
事务日志总开关:0 关闭,1 仅错误,2 仅事务,3 错误加事务。默认 squid 格式二进制日志位于 /opt/ats/var/log/trafficserver/squid.blog。
proxy.config.log.rolling_enabled(默认 1)与 rolling_interval_sec(默认 86400)、rolling_size_mb(默认 10)
滚动策略:按天滚动、单文件超 10MB 也触发滚动。高频访问站点建议 rolling_size_mb 提高到 100 并配合外部采集。
proxy.config.log.auto_delete_rolled_files(默认 1)
滚动后自动删除超出配额的旧日志;log.max_space_mb_for_logs(默认 25000)限定日志总配额。
proxy.config.log.max_space_mb_headroom(默认 1000)
配额警戒余量,达到后停止写日志防止写满磁盘。
5.5 访问控制与安全参数
proxy.config.url_remap.remap_required(url_remap.remap_required,默认 1)
强制所有请求必须命中 remap.config 规则,未命中返回 404。纯正向代理模式才需要改为 0,反向代理务必保持 1。
proxy.config.http.insert_response_via_str(默认 0,可热生效)
Via 响应头输出级别。实测置 1 后响应出现 Via: http/1.1 traffic_server (ApacheTrafficServer/10.2.0);置 3 追加编码状态段 [uScMsSf pSeN:t cCMp sS],可用 traffic_via 解析命中详情。
ip_allow.yaml(独立文件,YAML 格式)
客户端 IP 访问控制,默认允许全部并拒绝 PURGE/TRACE 等敏感方法。生产建议仅放行内网网段访问 PURGE:
ip_allow:
- apply: in
ip_addrs: [0.0.0.0/0, ::/0]
methods: [GET, POST, HEAD, PUT, DELETE, OPTIONS]
- apply: in
ip_addrs: [10.0.0.0/8]
action: allow
methods: [PURGE, PUSH]
监控端点保护与运维账号约定
ATS 10 没有内建 Web 管理界面与账号体系,操作面为两处:本机 traffic_ctl(经 Unix socket 的 JSONRPC,实测 Connection refused 与 Resource temporarily unavailable 报错均与其相关)与 stats_over_http 插件暴露的 HTTP 指标端点 /_stats。实测 /_stats 由内部全局插件直接产出响应,remap 规则与 header_rewrite 插件均无法对其插手——即使 header_rewrite 规则文件通过语法校验,set-status 动作对 /_stats 响应也不生效(实测带与不带凭据均返回 200,diags.log 可见 Unable to create remap instance 时旧规则继续服务的现象)。因此生产保护走网络层:
- 限定监听地址:server_ports 绑定内网网卡地址,例如 10.0.0.5:8080,不监听 0.0.0.0。
- 操作系统防火墙仅对可信网段开放 8080 端口。
- ip_allow.yaml 保持默认(PURGE 仅限本机),不为省事全放行。
运维账号约定:本文与部署模板中的管理账号为 admin(密码 q1w2e3r4),指登录服务器操作系统执行 traffic_ctl 与配置维护的账号(SSH 或堡垒机);ATS 服务进程仍以专用系统用户 ats 运行,两者职责分离。监控系统集成时建议使用内网专用采集账号并在采集端配置凭据,避免监控端点直接暴露公网。
5.6 线程与性能参数
proxy.config.exec_thread.autoconfig.enabled(默认 1)与 autoconfig.scale(实测默认 1)
网络线程数自动配置:线程数等于 CPU 核数乘以 scale。实测 12 核服务器 ET_NET 线程 12 个(traffic_ctl server status 的 thread_groups 可见)。锁定线程数时置 autoconfig.enabled 为 0 并设 exec_thread.limit。
proxy.config.exec_thread.limit(默认 2,autoconfig 关闭时生效)
手动网络线程数。一般等于 CPU 物理核数,不要超过核数两倍。
proxy.config.exec_thread.affinity(默认 1)
线程绑核开关,1 表示按 NUMA 与核绑定,降低跨核缓存失效。NUMA 机器保持 1。
proxy.config.thread.default.stacksize(实测默认 1048576 字节)
每线程栈大小 1MB,大并发下适度调低可省内存,一般不动。
proxy.config.cache.threads_per_disk(默认 8)
每个存储设备独立 I/O 线程数,NVMe 高并发场景可增至 16。
proxy.config.core_limit(实测默认 -1)
core dump 大小限制,-1 跟随系统 ulimit。排障期可放开。
5.7 存储参数(storage.config)
storage.config 每行定义一个缓存存储,格式为路径与大小。安装默认一行 var/trafficserver 256M,实测改为 512M 重启后生成 536870912 字节的 cache.db 文件:
ls -lh /opt/ats/var/trafficserver/cache.db
-rw-r--r-- 1 ats ats 512M Oct 12 06:41 /opt/ats/var/trafficserver/cache.db
在线查询存储状态:
/opt/ats/bin/traffic_ctl storage status /opt/ats/var/trafficserver
Device: /opt/ats/var/trafficserver/cache.db
Status: online
Error Count: 0
生产写法建议:专用分区或整块裸设备,直接写设备节点即自动启用 O_DIRECT,大小可省略(自动检测整盘):
/dev/disk/by-id/nvme0n1
文件存储写法(指定字节或 M/G 后缀):
/var/cache/ats/cache1.db 512G
storage 变更必须重启生效,且扩容会重新初始化存储结构;缩容或换路径会丢失缓存数据(重建是正常行为,回源流量会短暂上升)。
5.8 remap.config 映射规则
反向代理核心文件,每行一条规则,顺序匹配:
map http://www.example.com/ http://origin-backend.internal:9000/
map https://www.example.com/ http://origin-backend.internal:9000/
reverse_map http://origin-backend.internal:9000/ http://www.example.com/
- map:正向映射(客户端 URL 到源站 URL);reverse_map:源站重定向 Location 头改写回对外域名,反向代理成对使用。
- 通配匹配:
map / http://example.com/接管全部请求(实测经代理访问返回 example.com 内容)。 - 带 remap 级插件参数:行尾追加 @plugin= 与 @pparam=,例如缓存键规范化:
map http://www.example.com/ http://origin.internal/ @plugin=cachekey.so @pparam=--remove-all-params=true
修改后校验并热加载:
/opt/ats/bin/traffic_server -C verify_config
/opt/ats/bin/traffic_ctl config reload
六、生产配置模板
以下为 16 核 64GB 内存、1TB NVMe 缓存盘的反向代理模板(场景:Web 站点加速,热点小对象为主)。标注了每处调整的容量与场景依据。
records.yaml(在默认文件上调整以下项):
records:
accept_threads: 2
http:
server_ports: 8080 8443:ssl
insert_response_via_str: 1
keep_alive_no_activity_timeout_in: 115
keep_alive_no_activity_timeout_out: 115
connect_attempts_max_retries: 4
connect_attempts_reroute: 1
cache:
http: 1
required_headers: 2
heuristic_max_lifetime: 604800
max_stale_age: 86400
cache:
ram_cache:
size: 8589934592
ram_cache_cutoff: 1048576
threads_per_disk: 16
min_average_object_size: 12000
log:
rolling_enabled: 1
rolling_size_mb: 100
max_space_mb_for_logs: 200000
exec_thread:
autoconfig:
enabled: 1
scale: 1.0
url_remap:
remap_required: 1
容量依据:ram_cache.size 8GB(约为缓存盘的百分之一到百分之五,热点命中加速);ram_cache_cutoff 1MB(超大视频对象不挤占内存缓存);threads_per_disk 16 匹配 NVMe 深队列;日志配额 200GB 预留 30 天以上窗口。
storage.config(整盘裸设备写法,自动 O_DIRECT):
/dev/disk/by-id/nvme1n1
remap.config(成对映射示例):
map https://www.example.com/ http://10.0.0.11:9000/
reverse_map http://10.0.0.11:9000/ https://www.example.com/
plugin.config(监控端点,配合内网监听与防火墙保护):
stats_over_http.so
内存与磁盘评估口径:ATS 为纯 C++ 进程(无 JVM),实测默认配置 RSS 约 71MB;生产内存需求约为 ram_cache.size 加每连接开销(约 16KB 乘以 connections_throttle)再加 2GB 余量。按上表模板 64GB 内存机器可承载 8GB 内存缓存与 30000 并发连接余量充足。
七、常见问题
Q1:改了 records.yaml 执行 reload 后新值没生效?
先确认参数的 update type:
/opt/ats/bin/traffic_ctl config describe proxy.config.http.server_ports | grep update
update type : static, restart traffic_server
static 参数必须重启:
systemctl restart trafficserver
Q2:config set 修改的值重启后丢了?
config set 是运行时动态修改,不写回 records.yaml(实测验证)。持久化做法是编辑 records.yaml 后 reload,用 config get 与文件内容双重确认。
Q3:reload 后 traffic_ctl config status 显示失败?
查看具体失败任务:
/opt/ats/bin/traffic_ctl config status
常见原因是 YAML 缩进错误或引用了不存在的插件参数。用 verify_config 定位:
/opt/ats/bin/traffic_server -C verify_config
修正后重新 reload。
Q4:缓存命中率从哪里看?
查询命中计数指标并对比总量:
/opt/ats/bin/traffic_ctl metric get proxy.process.http.transaction_counts.hit_fresh proxy.process.http.incoming_requests
proxy.process.http.transaction_counts.hit_fresh 0
proxy.process.http.incoming_requests 4
或开启 insert_response_via_str 为 3 后用 traffic_via 解析每次请求的缓存判定。
Q5:storage.config 改大后必须做什么?
重启服务使新存储生效,并确认在线状态:
systemctl restart trafficserver
/opt/ats/bin/traffic_ctl storage status /opt/ats/var/trafficserver
Device: /opt/ats/var/trafficserver/cache.db
Status: online
Error Count: 0
八、参考链接
- records.yaml 官方参考:https://docs.trafficserver.apache.org/en/latest/admin-guide/files/records.yaml.en.html
- storage.config 官方参考:https://docs.trafficserver.apache.org/en/latest/admin-guide/files/storage.config.en.html
- remap.config 官方参考:https://docs.trafficserver.apache.org/en/latest/admin-guide/files/remap.config.en.html
- ip_allow.yaml 官方参考:https://docs.trafficserver.apache.org/en/latest/admin-guide/files/ip_allow.yaml.en.html
- 插件开发与内置插件清单:https://docs.trafficserver.apache.org/en/latest/plugins/index.en.html
- 缓存调优章节:https://docs.trafficserver.apache.org/en/latest/admin-guide/cache/index.en.html