#[serde(deny_unknown_fields)]。时间字段使用 humantime 格式,例如 "30s"、"500ms"、"2m"。
顶层结构
node
用于控制 worker 数、连接上限和全局 I/O 超时。
io_uring
控制每个 worker 线程的 io_uring 参数。该段全部字段变更都需要重启进程。
如果
arc_ring_sq_dropped_total 或 arc_ring_cq_overflow_total 非 0,通常说明 ring 太小,建议将 uring_entries 翻倍。listeners
监听器是一个数组,每个元素绑定一个地址。
kind 可选值:
socket 可选项:
tls
仅在监听器 kind 为 https 或 h3 时生效。
certificates 元素字段:
数组第一张证书会作为未命中 SNI 的兜底证书。
tls.acme
用于从 ACME CA 自动签发并续期证书。
account_key 字段:
challenge 类型:
完整 ACME 示例:
upstreams
这是命名上游组数组,路由通过 name 引用上游。
discovery
静态地址:
lb(负载均衡)
一致性哈希 key 来源可以是
client_ip、header(需 name)或 cookie(需 name)。
health
主动健康检查:
pool(连接池)
timeouts(上游超时)
tls(上游 TLS)
可选。配置后 Arc 会与上游建立 TLS 连接。
完整上游 TLS 示例见 TLS 与证书。
routes
路由规则为数组。匹配优先级遵循“更具体优先”:精确路径优先于通配路径,长路径优先于短路径。
match
路径模式:
Header 谓词
op 可选:exists、contains、regex、equals。全部操作都需要 name;值比较类操作还需要 value 或 pattern。
action
Header 变更操作
op:add、set、remove。
retry 字段:
rate_limit
key 策略可选:client_ip、header(需 name)或 route(全路由共享桶)。
mirror
split(流量分流)
plugins
全局插件注册区。路由通过名字引用插件。
WASM 插件字段
Rhai 脚本字段
把插件绑定到路由
stage 可选值:
observability
控制指标与管理端点。访问日志配置在下文 logging。
logging
控制结构化 NDJSON 访问日志。logging 是顶层字段,和 observability 分离。
logging.output:
logging.access:
observability.access_log.sample(默认1.0)和logging.access.sample(默认0.01)是两个独立字段。前者是旧参数,后者会覆盖前者。新配置建议统一使用logging.access.sample。
logging.redact:
logging.writer:
control_plane
control_plane 下所有字段变更都需要重启进程。
接口说明见 网关控制面 API 参考。

