启动配置参考
本参考介绍用于定义监听器、资源 来源连接、TLS、可观测性、缓存和限流后端以及托管连接等进程级设置的启动配置文件。
模型、调用方 API Key、服务提供方密钥、安全护栏、缓存策略和可观测性导出器不在启动配置中定义。对于开源 AISIX 网关,这些资源由 resources.yaml 文件或 etcd 提供;对于连接到 AISIX Enterprise 或 AISIX Cloud 的网关,则由控制面提供。
AISIX 接受 YAML、TOML 或 JSON 格式的启动配置文件。常见文件包括:
config.yaml:AISIX 加载的本地启动配置文件。config.example.yaml:不使用控制面、以配置存储为后端的完整网关示例,可复制或挂载为实际加载的config.yaml。config.managed.yaml:控制面在运行时提供资源时使用的网关引导配置。
下列示例使用 YAML,因为打包的示例配置采用 YAML。TOML 和 JSON 文件也可以定义相同的启动字段。面向任务的设置流程请参见启动配置。
配置模式
每台 AISIX 网关都使用启动配置文件。管理模式决定动态资源来自何处,以及哪些设置由运维人员直接管理。
| 网关配置 | 资源来源 | 选择方式 | 变更到达方式 |
|---|---|---|---|
| 使用资源文件的开源 AISIX 网关 | 声明式文件 | resources_file | 启动时加载,并在收到 SIGHUP 时重新加载。 |
| 使用配置存储的开源 AISIX 网关 | 自行管理的 etcd 集群 | etcd | 首次同步后持续接收 etcd Watch 事件。 |
| 连接到 AISIX Enterprise 或 AISIX Cloud 的 AISIX 网关 | 控制面 | managed.enabled: true 和生成的连接设置 | 网关通过托管的 etcd 连接接收控制面投影的资源。 |
无论使用哪种模式,代理、下游、上游、缓存、限流后端和本地可观测性设置仍属于网关启动设置。控制面提供模型、Key、策略和导出器等动态资源,但不会替换这些进程级设置。
对于开源 AISIX 网关,admin.enabled 默认为 true。默认的 admin.addr 值 127.0.0.1:0 会在回环地址上选择临时端口,不提供固定的可发现端口。要公开只读 Admin API,请将 admin.addr 设置为带固定端口的私有地址或回环地址,并至少配置一个 admin.admin_keys 值。将 admin.enabled 设置为 false 可禁用监听器。请通过资源文件或直接写入 etcd 来配置资源。连接到 AISIX Enterprise 或 AISIX Cloud 的网关绝不会绑定网关 Admin API。
常用启动配置
以下示例展示使用 etcd 的开源 AISIX 网关以及常见启动设置。网关也可以改为通过 resources_file 加载动态资源;请参阅资源来源。
etcd:
endpoints: # 用于存储动态网关资源的 etcd 端点。
- "http://127.0.0.1:2379"
prefix: "/aisix" # AISIX 在 etcd 中使用的 Key 前缀。
# env_id: "ENVIRONMENT_ID" # etcd 中网关资源的可选环境范围。
# user: "aisix" # 可选的 etcd 用户名。
# password_env: "AISIX_ETCD_PASSWORD" # 包含 etcd 密码的环境变量。
# dial_timeout_ms: 5000 # 限制与 etcd 的单次连接尝试——TCP 连接、TLS 握手和认证交互。
# 默认 5000;显式写 0 表示不施加超时。
# request_timeout_ms: 5000 # 可选,限制单次 etcd 请求-响应调用(含配置读取)的时间。不设置
# 和 0 都表示不施加超时。设置前请先阅读「etcd 配置存储」。
# tls: # mTLS 设置;三个证书字段必须同时提供。
# ca_cert_file: "/etc/aisix/mtls/ca.crt"
# client_cert_file: "/etc/aisix/mtls/client.crt"
# client_key_file: "/etc/aisix/mtls/client.key"
# domain_name: "etcd.example.com" # 可选的 SNI 和证书名称覆盖项。
proxy:
addr: "0.0.0.0:3000" # 面向调用方的代理 API 地址。
# request_body_limit_bytes: 0 # 请求体大小上限。默认值 0 表示不限制。
# 设置字节数可限制单请求内存。拒绝行为请参阅下文
# “限制请求体大小”。
# thread_per_core: true # 使用各自拥有监听器和上游连接池的独立 Worker 提供服务。
# 省略时,在 Linux 上启用,在其他平台关闭。设为 false 可使用
# 单个共享运行时。启动时应用,更改后需要重启。
# 请参阅“部署 > 每核一线程 Worker”。
# workers: 4 # 任一服务模式下的代理 Worker 线程数。省略时会跟随进程
# 可用的并行度,因此容器 CPU limit 或 taskset CPU 亲和性
# 掩码都可以确定其大小。最小值为 1。启动时应用。
# tls: # addr 所描述的那一个监听器的 HTTPS 证书和密钥。
# cert_file: "/etc/aisix/tls/proxy.crt"
# key_file: "/etc/aisix/tls/proxy.key"
# listeners: # 多个代理监听器,每个有各自可选的 TLS——用于需要同时提供
# HTTPS 和明文 HTTP 的部署。一旦设置,它就是代理监听器的
# 完整集合:只有这些地址会被绑定,上面的 addr 会被忽略
#(它仍是必填字段,网关会在启动时记录一行日志说明这一点),
# 并且上面的 tls 必须不存在。每个监听器提供相同的路由和配置。
# 规则和环境变量写法参阅 部署 > TLS 与 mTLS。
# - addr: "0.0.0.0:3443"
# tls:
# cert_file: "/etc/aisix/tls/proxy.crt"
# key_file: "/etc/aisix/tls/proxy.key"
# - addr: "0.0.0.0:3000"
# real_ip: # AISIX 在可信代理后运行时解析调用方 IP。
# trusted_proxies:
# - "10.0.0.0/8"
# recursive: true
# header: "x-forwarded-for"
# url_rewrites: # 路由前在入口级重写路径(第一条匹配规则生效)。
# - name: per-server-mcp-compat # 网关日志中使用的可选标签。
# match: "^/mcp-servers/([^/]+)/mcp$" # 针对原始请求路径的正则表达式。
# rewrite: "/mcp/$1" # 替换匹配部分;规则错误会导致启动失败。
# # 完整语义请参阅“部署 > URL 重写”。
admin:
enabled: false
observability:
service_name: "aisix" # 遥测数据中使用的服务名称,包括 OTLP 的 service.name。
log_level: "info" # 进程日志级别。
access_log: true # 每个请求写一行访问日志(info 级别)。设为 false 关闭。
metrics:
prometheus:
enabled: true # 是否暴露 Prometheus 指标。
path: "/metrics" # 指标端点路径。
addr: "0.0.0.0:9090" # 专用指标/状态监听地址。
# debug: # 提供 GET /debug/pprof/heap 的诊断监听器。
# enabled: true # 无身份认证,请保持绑定在回环地址。
# addr: "127.0.0.1:9091" # 绑定失败只记录日志,不会阻止网关启动。
# heap_profiling:
# auto_dump: # 内存接近内存上限时自动写出堆 profile。
# enabled: true
# thresholds: [0.8, 0.9] # 内存上限的比例,每个值须在 (0, 1] 内。
# dir: "/var/lib/aisix/heap" # 不存在时自动创建。请使用在重启后仍保留的卷。
# keep: 5 # 每个主机名保留的 profile 数量,至少为 1。
# # 参见 可观测性 > 内存诊断。
# managed: # 网关使用控制面时启用。
# enabled: true
# cache: # 选择 Redis 的缓存策略所使用的 Redis 连接。
# redis:
# mode: "single"
# url: "redis://127.0.0.1:6379"
# # nodes: ["redis://10.0.0.1:6379"] # Cluster 模式的种子节点。
# # sentinels: ["redis://10.0.0.1:26379"] # Sentinel 模式的节点。
# # master_name: "mymaster" # Sentinel 模式的主节点组。
# # username: "default" # Redis ACL 用户,所有模式生效;覆盖 URL 中的凭据。
# # password: "replace-me" # Redis ACL 密码,所有模式生效;覆盖 URL 中的凭据。
# # database: 0 # 数据库索引,single 和 sentinel 模式生效。
# # timeout_secs: 5 # 约束一次 Redis 往返和一次连接尝试,最小值为 1。
ratelimit:
backend: "memory" # 限流计数器后端;跨副本共享计数器时使用 redis。
# redis:
# mode: "single"
# url: "redis://127.0.0.1:6379"
# # nodes: ["redis://10.0.0.1:6379"] # Cluster 模式的种子节点。
# # sentinels: ["redis://10.0.0.1:26379"] # Sentinel 模式的节点。
# # master_name: "mymaster" # Sentinel 模式的主节点组。
# # username: "default" # Redis ACL 用户,所有模式生效;覆盖 URL 中的凭据。
# # password: "replace-me" # Redis ACL 密码,所有模式生效;覆盖 URL 中的凭据。
# # database: 0 # 数据库索引,single 和 sentinel 模式生效。
# # timeout_secs: 5 # 约束一次 Redis 往返和一次连接尝试,最小值为 1。
# concurrency_ttl_secs: 300 # Redis 租约 TTL;活跃流会续约其槽位。
upstream: # 网关发起的出站调用。以下为默认值。
pool_idle_timeout_secs: 30 # 应低于网关与服务提供方之间最短的空闲超时。
# timeout_ms: 6000000 # 模型及其组/路由器均未设置 timeout 时的默认请求截止时间(6000 秒)。0 表示禁用兜底值。
# stream_timeout_ms: 0 # 默认流式分块间隔截止时间。0 表示回退到 timeout_ms。
# retries: 2 # 模型及其组/路由器均未设置 retries 时,可重试失败后的尝试次数。0 表示禁用重试。
# connect_timeout_ms: 5000 # DNS、TCP 和 TLS 的时间预算。在 /v1/realtime 上还
# 覆盖 WebSocket 升级握手。0 表示禁用。
# tcp_keepalive_secs: 60 # 首次 Keepalive 探测前的空闲时间。0 表示禁用。
# tcp_keepalive_interval_secs: 30 # Keepalive 探测间隔。
# tcp_keepalive_retries: 5 # 丢弃连接前允许的未确认探测次数。
# pool_max_idle_per_host: 32 # 每个上游主机的空闲连接上限。未设置表示不限制。
# 对 Worker 本地连接池的每个 Worker 分别生效。
# tls: # 网关执行出站调用时信任的证书。
# ca_file: "/etc/aisix/tls/private-ca.pem" # 除平台自身 CA 外额外信任的 CA。
# client_cert_file: "/etc/aisix/tls/client.crt" # 用于要求 mTLS 且受支持的 HTTP 上游。
# client_key_file: "/etc/aisix/tls/client.key" # 必须与 client_cert_file 一起提供。
# verify: true # false 表示在受支持的位置禁用验证,仅用于测试环境。
# media_fetch: # 下载上游无法自行读取的 Chat 媒体 URL。
# enabled: true # false 表示改为以 400 拒绝这类 URL。
# max_bytes: 52428800 # 每个 URL 的最大下载量(50 MiB)。
# 参见“服务提供方兼容性 > 原生服务提供方的媒体内容”。
# bedrock:
# mantle_endpoint: null # Bedrock Mantle 基础 URL,用于 bedrock-runtime 拒绝计数的
# Claude Token 计数。null 表示按服务提供方密钥的区域推导为
# https://bedrock-mantle.<region>.api.aws。VPC 端点或 GovCloud 时设置。
# outbound: # 访问 API 调用方提供的 URL 的请求,例如媒体下载。
# ssrf_protection: # 服务端请求伪造(SSRF)防护。
# enabled: true # false 表示关闭地址检查,此时忽略 allowed_hosts。
# allowed_hosts: [] # 即使解析到非公网地址也允许访问的主机。
downstream: # 接收客户端入站调用的连接层。以下为默认值。
idle_timeout_secs: 0 # 关闭两次请求间空闲的连接。0 表示从不关闭。
# sse_keepalive_interval_secs: 15 # 静默流式响应的心跳间隔。0 表示禁用。
# 可选的部署级 AWS Bedrock 安全护栏流量覆盖项。
# bedrock_endpoint_url: "https://bedrock-runtime.us-east-1.amazonaws.com"
启动配置的更改会在网关重启后生效。