Apache Traffic Server 10.2.0 配置参数详解

本文系统讲解 Traffic Server 10.2.0 配置:records.yaml 语法与点分参数映射、storage.config 与 remap.config 写法、核心参数实测默认值、热加载规则与生产模板,均经真实环境验证。

Apache Traffic ServerApache Traffic Server2026/10/12

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(参数值两系统一致)

二、前置条件

  1. 已按官方源码方式安装 ATS 10.2.0 并能通过 systemctl 正常启停(安装过程见对应系统安装指南)。
  2. 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",
  1. 修改配置前备份 /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_portshttp.server_ports8080 8080:ipv6监听端口
proxy.config.http.cache.httphttp.cache.http1HTTP 缓存总开关
proxy.config.http.insert_response_via_strhttp.insert_response_via_str0Via 响应头
proxy.config.url_remap.remap_requiredurl_remap.remap_required1必须命中 remap 规则
proxy.config.cache.ram_cache.sizecache.ram_cache.size-1内存缓存自动
proxy.config.cache.ram_cache_cutoffcache.ram_cache_cutoff41943044MB 以上对象不进内存缓存
proxy.config.cache.threads_per_diskcache.threads_per_disk8每存储磁盘线程
proxy.config.cache.limits.http.max_altscache.limits.http.max_alts5单 URL 变体上限
proxy.config.cache.min_average_object_sizecache.min_average_object_size8000对象平均大小估计
proxy.config.diags.debug.enableddiags.debug.enabled0调试日志
proxy.config.log.logging_enabledlog.logging_enabled3事务日志开关
proxy.config.log.rolling_enabledlog.rolling_enabled1日志滚动
proxy.config.log.rolling_interval_seclog.rolling_interval_sec86400滚动间隔
proxy.config.log.rolling_size_mblog.rolling_size_mb10单文件大小滚动阈值
proxy.config.exec_thread.autoconfig.scaleexec_thread.autoconfig.scale1网络线程自动配置比例
proxy.config.accept_threadsaccept_threads1accept 线程数

五、核心参数分类详解

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 时旧规则继续服务的现象)。因此生产保护走网络层:

  1. 限定监听地址:server_ports 绑定内网网卡地址,例如 10.0.0.5:8080,不监听 0.0.0.0。
  2. 操作系统防火墙仅对可信网段开放 8080 端口。
  3. 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

八、参考链接

  1. records.yaml 官方参考:https://docs.trafficserver.apache.org/en/latest/admin-guide/files/records.yaml.en.html
  2. storage.config 官方参考:https://docs.trafficserver.apache.org/en/latest/admin-guide/files/storage.config.en.html
  3. remap.config 官方参考:https://docs.trafficserver.apache.org/en/latest/admin-guide/files/remap.config.en.html
  4. ip_allow.yaml 官方参考:https://docs.trafficserver.apache.org/en/latest/admin-guide/files/ip_allow.yaml.en.html
  5. 插件开发与内置插件清单:https://docs.trafficserver.apache.org/en/latest/plugins/index.en.html
  6. 缓存调优章节:https://docs.trafficserver.apache.org/en/latest/admin-guide/cache/index.en.html