更新日志
3.10.0
发布日期:2026-06-01
不兼容变更
控制面
-
移除 Service Template 与 API 发布机制
升级说明Service Template / Service Hub 模型已被移除。Service 现在直接归属于 Gateway Group,并通过 APISIX Admin API 管理——不再有独立的模板、发布、版本、回滚和 runtime 配置层。在控制台中,Service Hub 区域被各 Gateway Group 下的 Services 列表取代。
控制面升级到 3.10.0 时,既有的 service template 和 published service 会自动迁移到新的直连 service 模型。原始数据会被保留(不会删除),因此升级可以回滚。引用 service-template 或 published-service ARN 的 IAM 权限策略会被自动备份并重写。
开发者门户
-
仅对已发布的 API Product 强制开发者认证
升级说明此前,处于**草稿(draft)状态的 API Product 也会把其开发者认证规则同步到网关,因此草稿产 品下的 route 也会要求开发者认证。从 3.10.0 起,只有已发布(published)**的 API Product 才会向数据面下发开发者认证规则。
升级后,属于草稿(未发布)API Product 的 route 在产品发布之前不再要求开发者认证。如果你依赖草稿产品被保护,请发布它们,或通过其他方式限制访问。
升级须知
数据面网关 runtime 已从 OpenResty 1.21.4.4 升级到 OpenResty 1.29.2.4,并改为基于开源 apisix-runtime 构建。本次升级的主要目的是跨越多个大版本,引入上游 NGINX 内核、OpenSSL、LuaJIT 及内置依赖库的最新 安全修复。
大多数部署无需任何操作。一个可见的变化是:HTTP/2 现在通过 NGINX 1.25+ 的 http2 on; 指令启用,而不再使用 per-listen 的 http2 参数;HTTP/2 over cleartext(h2c)和 over TLS 仍照常工作。如果你维护了自定义的 NGINX 配置片段,请在升级前确认它们与较新版本的 NGINX 兼容。
hmac-auth 插件现在将 signed_headers 默认设为 ["date"]。数据面升级后,任何未显式设置 signed_headers 的 hmac-auth 配置都要求客户端签名覆盖 Date 头。此前未对 Date 签名的客户端将开始收到 HTTP 401,错误信息为 client request can't be validated。
升级前,请确保客户端对 Date 头签名,或在插件配置中显式设置 signed_headers 以匹配客户端实际签名的头。
新功能
插件
- AI Proxy
- 上游 LLM 请求体现在使用排序后的 key 进行 JSON 编码。这会为等价请求生成稳定、逐字节一致的请求体,从而提升按精确请求体缓存的 LLM 提供商的 prompt-cache 命中率。
- AI Proxy Multi
- 当 LLM endpoint 域名解析到多个 A 记录时,插件现在会解析全部 A 记录并构建多节点 upstream,逐请求选择节点以获得更好的负载分 布和故障转移。
Host头和 TLS SNI 保留原始域名,而不是解析出的 IP 地址。
- 当 LLM endpoint 域名解析到多个 A 记录时,插件现在会解析全部 A 记录并构建多节点 upstream,逐请求选择节点以获得更好的负载分 布和故障转移。
- Proxy Cache
- 内存缓存策略现在支持
Vary响应头。响应会按Vary中列出的头计算出的变体分别缓存,Vary: *的响应不会被缓存。
- 内存缓存策略现在支持
- CAS Auth
cas_callback_uri现在支持绝对 URL,并原样用作 CAS service URL。当网关位于代理之后、对外可见的 callback URL 与请求路径不同时,这非常有用。
控制台(Dashboard)
- 新增权限策略语句的可视化编辑器。现在你可以通过选择资源类型、操作(标注了访问级别)和条件来构建 IAM 策略,无需手写策略 JSON。
- 配置兼容性告警现在会展示每个受影响资源的完整业务层级路径(例如 gateway group → service → route),而不是裸资源 ID,更便于定位需要处理的配置。
缺陷修复
插件
- Error Page
- 修复问题:插件此前根据 upstream status 变量判断是否渲染自定义错误页,可能会替换掉真正来自上游服务的错误响应。现在插件会判定响应来源——只对网关或插件产生的错误(如上游连接失败或被插件拒绝的请求)渲染自定义错误页,而真正由上游返回的错误响应会原样透传,保留上游的原始响应体。
- Feishu Auth
- 修复问题:客户端可以传入伪造的
X-Userinfo头并被转发到上游。插件现在会在认证前清除客户端传入的X-Userinfo头,确保上游只收到由插件校验的身份信息。
- 修复问题:客户端可以传入伪造的
- CAS Auth
- 修复问题:登录回调未校验已签名的发起 cookie,使得构造的回调请求可以操纵登录后的跳转目标(CSRF / open-redirect)。回调现在要求携带有效的已签名发起 cookie,否则以
HTTP 401拒绝。
- 修复问题:登录回调未校验已签名的发起 cookie,使得构造的回调请求可以操纵登录后的跳转目标(CSRF / open-redirect)。回调现在要求携带有效的已签名发起 cookie,否则以
- DingTalk Auth
- 修复问题:认证失败与上游瞬时失败未做区分。插件现在对认证错误返回
HTTP 401,对 DingTalk 或上游的瞬时失败返回HTTP 503,并提供更清晰的错误信息。
- 修复问题:认证失败与上游瞬时失败未做区分。插件现在对认证错误返回
- Authz Casdoor
- 修复问题:session cookie 名称在不同 Casdoor client 间共享,导致不同 client 的 session 可能冲突。session cookie 现在按 client(基于
client_id)隔离命名。
- 修复问题:session cookie 名称在不同 Casdoor client 间共享,导致不同 client 的 session 可能冲突。session cookie 现在按 client(基于
- Authz Keycloak
- 修复问题:当静态
permissions与http_method_as_scope同时使用时,派生出的方法 scope 会被写回复用的插件配置,导致 scope 跨请求累积。现在会在追加方法 scope 之前先克隆 permission 列表。
- 修复问题:当静态
- GraphQL Limit Count
- 修复问题:查询嵌套深度计算有误,导致基于深度的限流不准确。现在深度会按真实最大嵌套深度并展开 fragment 计算 。Content-Type 匹配也容忍 charset 参数(如
application/json; charset=utf-8),此前这类请求会被拒绝。
- 修复问题:查询嵌套深度计算有误,导致基于深度的限流不准确。现在深度会按真实最大嵌套深度并展开 fragment 计算 。Content-Type 匹配也容忍 charset 参数(如
- GraphQL Proxy Cache
- 修复问题:
Content-Type带 charset 参数的请求未被识别为 GraphQL 请求。Content-Type 匹配现在容忍 charset,同时增加了 nil 守卫、更清晰的错误信息并修正了日志级别。
- 修复问题:
数据面
- 修复问题:当同一请求上有多个日志插件抓取响应体时(例如
http-logger和file-logger都启用了include_resp_body),它们的响应体缓冲区可能相互干扰,产生截断或混杂的日志输出。现在每个 logger 使用独立的缓冲区。
3.9.13
发布日期:2026-05-22
不兼容变更
插件
-
CAS Auth
升级说明cas-auth插件现在要求配置长度至少为 32 个字符的cookie.secret。插件使用该密钥对CAS_REQUEST_URIcookie 进行 HMAC 签名和校验,防止客户端可控 cookie 修改登录后的跳转目标。升级前,请为所有已有
cas-auth配置补充cookie.secret,并确保所有网关节点使用相同密钥。
升级须知
proxy-cache 和 graphql-proxy-cache 插件现在默认使用更安全的缓存行为。
对于 proxy-cache,当请求存在已认证 consumer 或 remote user 时,缓存会按 consumer 隔离,除非配置的 cache_key 已经包含身份相关变量。内存缓存策略也不再缓存上游 Cache-Control 包含 private、no-store 或 no-cache 的响应;内存和磁盘缓存策略都默认跳过带 Set-Cookie 的响应,除非设置 cache_set_cookie: true。
对 于 graphql-proxy-cache,缓存键默认包含 host、route、service 和 consumer 身份,带 Set-Cookie 的响应默认也会被跳过,除非设置 cache_set_cookie: true。
如果你确实需要跨 consumer 共享缓存,请设置 consumer_isolation: false。如果你确实需要缓存带 Set-Cookie 的响应,请设置 cache_set_cookie: true。
新功能
插件
- AI Proxy
- 优化 OpenAI 兼容流式响应吞吐,降低逐 token flush 和 SSE 解析开销。在使用 mock OpenAI 上游的内部单 worker benchmark 中,峰值流式吞吐从 44,102.6 tokens/s 提升到 138,158.7 tokens/s,约提升 3.13 倍。
- 优化使用
post_arg.*路由变量的 AI 大 JSON 请求体处理。在 1 MB、5 MB、10 MB OpenAI Chat Completions 兼容请求体的内部 benchmark 中,当网关透传原始请求体时吞吐提升 5.15-5.35 倍;当网关转发前改写请求体时吞吐提升 2.47-2.67 倍。 - 新增
streaming_flush_interval_ms,用于控制流式响应的周期性 flush。默认值为 10 ms,可降低逐 chunk flush 开销,同时保持有界的流式响应延迟。
- OpenAPI to MCP
- 新增
allowed_hosts,用于限制动态解析后的base_url可访问的目标主机。未配置allowed_hosts时,既有行为不变。插件现在也会对解析后的 URL 进行校验,对非法 URL 或非 HTTP(S) scheme 返回 HTTP 400。
- 新增
- Proxy Cache 和 GraphQL Proxy Cache
- 新增
consumer_isolation和cache_set_cookie选项,用于控制升级说明中描述的更安全缓存行为。
- 新增
控制面
- Alert Policy 现在支持在告警条件触发时自动创建 Debug Session。Alert History 会记录 Debug Session 创建是否成功,并包含创建出的 session ID 或错误详情。
- Fallback Control Plane 存储现在支持 S3-compatible path-style endpoint,可用于 MinIO 等要求 bucket 名称出现在 URL path 中的 S3 兼容服务。
控制台(Dashboard)
- Gateway Group 下新增 Debug Sessions UI,包括 session 列表、创建、停止、删除、trace 列表、trace waterfall 详情、搜索和过滤、minimap、URL 状态同步、字段格式化和键盘导航。
- 删除/停用确认弹窗新增复制按钮,用户可在执行破坏性操作前复制资源标识。
- 监控页面的 service 和 route 选择器支持搜索。
开发者门户
- 新增用于在 Kubernetes 中部署 Developer Portal 的 Helm chart。
缺陷修复
插件
- OpenID Connect
- 修复问题:客户端传入的身份头(
X-Access-Token、X-Userinfo、X-ID-Token、X-Refresh-Token)可能被转发到上游,而不是使用插件校验后的值。现在这些头会被清除或覆盖,确保上游只收到由插件控制的身份信息。
- 修复问题:客户端传入的身份头(
- Data Mask
- 修复问题:插件在处理多值 query 参数、无值 query 参数、非字符串 JSON 值、regex 失败和表单解析错误时可能崩溃或产生错误脱敏结果。regex 替换失败时也不再把原始敏感值写入日志。
- ACL
- 修复问题:
external_user_label_field_parser和external_user_label_field_separator可能错误地应用到 consumer labels,导致错误的允许或拒绝决策。现在它们只用于 external-user label 提取路径。
- 修复问题:
- Chaitin WAF 和 Wolf RBAC
- 修复问题:插件向后端服务发送客户端 IP 时使用了客户端可伪造的原始 IP 请求头。现在改为使用网关解析后的可信真实客户端 IP。
- Client Control
- 修复问题:当 Global Rule 插件在 access 阶段读取请求体时,路由或服务上的
client-control无法先应用请求体大小覆盖,导致大请求被意外拒绝。
- 修复问题:当 Global Rule 插件在 access 阶段读取请求体时,路由或服务上的
控制面
- 修复问题:删除仍被其他资源引用的 Secret 会留下悬空引用,并可能导致网关运行时错误。现在 Secret 仍存在引用时会拒绝删除。
- 修复问题:当
dp_manager_address同时包含域名和 IP 地址时,Data Plane Manager 证书可能无法通过旧版 Data Plane 的主机名校验。 - 修复问题:心跳上报中的非法网关版本字符串可能导致兼容性校验崩溃。现在会将其作为不兼容版本处理,而不是触发 panic。
- 修复问题:非法的 stream route CIDR/IP 值和非法的
post_arg.*JSON path 表达式可能被控制面接受,随后在数据面被拒绝或丢弃。现在这些配置会在 API 层被拒绝。 - 修复问题:解密
AesEncrypt字段失败时,敏感加密字段值可能出现在日志中。现在日志只记录值长度。
数据面
- 修复问题:引用 service 的 stream route 可能持续使用旧的 service 级插件配置,直到 route 变更或 worker 重启。
- 修复问题:etcd 或 DP Manager 响应缺少预期 revision header 时,网关 worker 可能在启动阶段崩溃。现在网关会记录问题并重试。
- 修复问题:启用 status report 时,stream worker 可能在配置同步期间崩溃。
- 修复问题:标准网关 runtime 镜像缺少时区数据,导致
TZ环境变量对 IANA 时区名称不生效。 - 修复问题:启用 tracing 时,tracer 可能在 HTTPS 或 HTTP/2 keepalive 连接上崩溃。
- 修复问 题:网关 CLI 将控制面 mTLS client certificate 文件写入系统临时目录,且权限过宽。现在这些文件会写入网关配置证书目录,并使用更严格的权限。
控制台(Dashboard)
- 修复问题:OpenID Connect 插件代码编辑器在小视口或高缩放比例下可能折叠或无法访问。
- 修复问题:从服务列表删除 Published Service 成功后,可能显示误导性的 "service not found" 错误 toast。
- 修复问题:一个页面可能修改列表表格默认值,并将非法排序参数泄漏到 Gateway Instances 页面。
- 修复问题:插件查看抽屉在 local、global 和 metadata 标签页之间切换时,可能显示过期或错误的 JSON。
- 修复问题:缓存的 gateway group 或 portal ID 不存在时,页面可能空白或显示 404 错误 toast,而不是跳转到有效的兜底资源。
3.9.12
发布日期:2026-05-08
新功能
插件
- AI Proxy
- 新增 AWS Bedrock 提供商支持,使用 Converse API。通过配置
"provider": "bedrock"、auth.aws中的 AWS IAM 凭证和provider_conf.region中的 AWS 区域即可使用。支持非流式和流式(ConverseStream)两种模式——在请求体中设置"stream": true即可获取流式响应。
- 新增 AWS Bedrock 提供商支持,使用 Converse API。通过配置
- OAS Validator
- 新增
spec_url字段,支持从远程 HTTP(S) URL 加载 OpenAPI 规范,替代在插件配置中内嵌完整 JSON 字符串。当规范文件超过spec字段的 2 MB 内联大小限制时特别有用。获取的规范使用可配置的 TTL 进行缓存(默认 1 小时,通过插件元数据spec_url_ttl设置),过期条目在后台刷新期间继续提供服务。另提供spec_url_request_headers(自定义 HTTP 头,如用于认证)和timeout(请求超时,毫秒,默认 10000)字段。spec和spec_url互斥。
- 新增
缺陷修复
插件
- File Logger
- 修复问题:当路由同时配置了
gzip插件和file-logger(启用include_resp_body)时,file-logger错误地尝试解压响应体。由于 APISIX 自身执行了 gzip 编码,日志器可用的响应体仍然是明文,导致产生虚假的inflate gzip err: INFLATE: data error日志条目,并且日志 输出中丢失了响应体内容。
- 修复问题:当路由同时配置了
- Elasticsearch Logger
- 修复问题:使用日期时间占位符的动态索引模式(如
gateway-{%Y.%m.%d})在第一个请求后停止轮转。解析后的日期字符串被回写到共享配置对象中,永久覆盖了模板,直到工作进程重启。
- 修复问题:使用日期时间占位符的动态索引模式(如
- OAS Validator
- 修复问题:请求头参数校验区分大小写,当请求中的头名称大小写与 OpenAPI 规范定义不完全匹配时(例如发送
X-Request-Id而规范定义的是x-request-id),请求会被拒绝。现已按照 RFC 7230 §3.2 实现大小写不敏感匹配。
- 修复问题:请求头参数校验区分大小写,当请求中的头名称大小写与 OpenAPI 规范定义不完全匹配时(例如发送
3.9.11
发布日期:2026-04-30
升级须知
本版本将 secret 引用($secret://、$env://)扩展为所有插件集中支持。升级控制面到 3.9.11 后,如果在之前不支持 secret 引用的插件字段中 配置了 secret 引用,仍运行 3.9.10 或更早版本的数据面将不会解析这些引用——它会将字面量 $secret://... 字符串传递给插件。
推荐升级路径:在配置新支持的插件字段中的 secret 引用之前,先将所有数据面升级到 3.9.11。之前已支持 secret 的插件(jwt-auth、openid-connect、limit-count、authz-keycloak、csrf、limit-req、limit-conn)不受影响。
新功能
插件
- AI Proxy
- 新增 passthrough 协议适配器,可将无法识别的 API 格式(如
/v1/images/generations)透传至上游而不进行转换。此前,不匹配已知协议(OpenAI Chat、Completions、Embeddings 等)的请求会被拒绝。 - 使用白名单构建方式重写了 Anthropic 到 OpenAI 的协议转换器。这防止了 Anthropic 特有字段(如
metadata、top_k、thinking、output_config)泄漏到 OpenAI 兼容的上游提供商,并改善了工具调用、系统提示和多模态内容的转换准确性。 - 当 ai-proxy 使用 cosocket 传输调用 LLM 后端时,访问日志中的上游 nginx 变量(
$upstream_status、$upstream_addr、$upstream_response_time、$upstream_header_time、$upstream_connect_time、$upstream_response_length)现在能正确填充。此前由于绕过了 nginx 的 upstream 模块,这些变量为空。
- 新增 passthrough 协议适配器,可将无法识别的 API 格式(如
- OAS Validator
- 用纯 Lua 实现(
lua-resty-openapi-validator)替换了基于 Go FFI 的 OpenAPI 验证器。基于真实大规模 OpenAPI 规范(Stripe,约 414 个端点)的内部基准测试显示,新验证器每次请求校验快 2-7 倍,规范编译快 20 倍,同时消除了 Go 共享库从而减小了网关镜像体积。新验证器还修复了路径参数路由、nullable schema、allOf/anyOf 合并的正确性问题,并新增了对 form-encoded 请求体校验的支持(此前实现无法处理)。
- 用纯 Lua 实现(
- 所有插件现在自动支持在任何配置字段中使用
$secret://和$env://引用。此前仅少数插件(jwt-auth、openid-connect、limit-count、authz-keycloak、csrf、limit-req、limit-conn)显式支持 secret 引用。这消除了每个插件单独实现 secret 解析的需要。
数据面
- 新增 distroless 网关镜像变体(
api7-ee-3-gateway-distroless)。该镜像从零构建,仅包含运行网关所需的共享库、CA 证书和时区数据,消除了运行时未使用但携带 CVE 的操作系统包。
控制台(Dashboard)
- 配置兼容性警告和错误现在通过数据面实例卡片上的可点击徽章单独显示。点击徽章打开一个详细模态框,展示所有配置问题的表格(资源类型、ID、严重级别和消息),便于识别和解决配置 schema 问题,而不会与版本兼容性状态混淆。
缺陷修复
插件
- AI Proxy Multi
- 修复问题:控制面推送配置更新后,健康检查验证记录大量噪声警告日志(
unable to construct upstream for plugin: ai-proxy-multi),因为 DNS 解析状态在配置表替换时丢失。
- 修复问题:控制面推送配置更新后,健康检查验证记录大量噪声警告日志(
- AI Rate Limiting
- 修复问题:包含点号的 AI 实例名称(如
Qwen3.5-397B-10.249.238.157)导致 HTTP 500 错误,因为名称被错误地解析为ctx.var路径表达式而非常量键。
- 修复问题:包含点号的 AI 实例名称(如
- AI Request Rewrite
- 修复问题:无请求体的请求产生模糊的上游错误,而非返回明确的 HTTP 400 Bad Request。
- AI Prompt Template
- 修复问题:JSON 解析错误消息显示为混乱的 Lua 表引用(如
table: 0x...),而非可读的错误字符串。
- 修复问题:JSON 解析错误消息显示为混乱的 Lua 表引用(如
- OpenTelemetry
- 修复问题:
additional_attributes中的非字符串值(如来自 nginx 变量的数字或布尔值)被 OpenTelemetry SDK 静默丢弃。现在在添加到 span 之前会强制转换为字符串。
- 修复问题:
- Limit Count
- 修复问题:Redis 凭证(
redis_password、redis_username、sentinel_password)被嵌入速率限制分组键中,在 Redis 键空间和 APISIX 日志中暴露敏感信息。
- 修复问题:Redis 凭证(
- Traffic Split (Stream)
- 修复问题:在 stream(L4)上下文中
ctx.var.route_id始终返回 nil,导致 traffic-split 规则中基于route_id的匹配条件永远无法生效。 - 修复问题:在 stream 上下文中,traffic-split 通过
upstream_id选择的上游被忽略,始终使用路由原始的上游。
- 修复问题:在 stream(L4)上下文中
控制面
- 修复问题:配置兼容性报告中的警告级别条目错误地导致数据面实例显示“建议升级”,即使控制面和数据面版本一致。
数据面
- 修复问题:批处理器在 nginx worker 关闭期间进入无限定时器循环,阻止优雅关闭并产生大量
[alert]日志。 - 修复问题:批处理器的
processed_entries计数器在过期缓冲区清理时被重置,导致批处理插件(如 http-logger、kafka-logger)的投递指标不准确。 - 修复问题:活跃健康检查的
request_body配置被静默忽略,因为底层健康检查库期望字段名为http_req_body。schema 字段已重命名以匹配。 - 修复问题:加密/解密操作失败时,错误日志中暴露敏感字段值。错误消息不再包含原始值。
- 修复问题:升级过程中新增
encrypt_fields后,预存明文数据的预期解密失败产生噪声的 warn 级别日志。这些日志现在 记录为 info 级别并附带解释说明。
3.9.10
发布日期:2026-04-22
不兼容变更
插件
-
升级说明
OpenAPI2MCP 服务不再内置于网关镜像中,现作为独立 sidecar 容器(
api7/openapi-to-mcp)运行,网关镜像体积因此减少约 150 MB。如果你使用了openapi-to-mcp或mcp-tools-acl插件,需要在网关旁部署 OpenAPI2MCP sidecar 容器。Kubernetes 环境中,在网关 Helm chart 中启用openapiToMcp.enabled=true。Docker Compose 环境中,将api7/openapi-to-mcp容器与网关置于同一网络命名空间下。
升级须知
本版本为多个插件新增了 encrypt_fields:AI Proxy(auth.header、auth.query、auth.gcp.service_account_json)、AI Proxy Multi(instances.* 下的相同字段)、AI RAG(embeddings_provider.azure_openai.api_key、vector_search_provider.azure_ai_search.api_key)、AWS Lambda(authorization.apikey、authorization.iam.accesskey、authorization.iam.secretkey)、OpenID Connect(新增 client_rsa_private_key)和 SAML Auth(新增 secret_fallbacks)。
控制面升级到 3.9.10 后,在写入路由/服务配置到 etcd 时会加密这些新声明的字段。如果数据面仍运行旧版本(3.9.9 或更早),由于旧版不识别这些新的 encrypt_fields,将跳过解密,导致加密后的密文被原样使用——例如,AI Proxy 路由会将 AES 密文而非真实 API Key 发送给 LLM 提供商,导致静默的认证失败(LLM 返回 HTTP 401)。
推荐升级路径:按照标准升级顺序——先升级控制面,再升级数据面。但在升级控制面后,请勿修改上述受影响插件的配置,直到所有数据面都升级到 3.9.10。对这些插件的任何配置编辑或重新发布都会导致控制面加密新声明的字段,而旧版数据面无法解密。请在控制面升级后尽快将数据面升级到 3.9.10,以恢复完整的加解密一致性。
新功能
插件
- AI Proxy
- 新增
override.request_body支持按协议深度合并请求体覆盖,以及override.llm_options提供感知提供商的max_tokens映射。运维人员可通过request_body_force_override标志将协议特定参数(如max_tokens、stop_sequences)设置为默认值或强制值。优先级顺序:model options → LLM options(始终强制)→ request body(按协议深度合并)。 - 新增
max_stream_duration_ms和max_response_bytes安全限制,防止无界限的 LLM 流式响应导致 worker 进程 CPU 占用过高。超出任一限制时,流将被优雅终止并返回相应错误信号。 - 网关现在可在流式传输过程中检测客户端断开连接,并立即停止从 LLM 上游读取数据,释放 worker 资源并避免不必要的 API 配额消耗。
- 新增
- Prometheus、OpenTelemetry、Zipkin
- 新增
response_source标签(Prometheus)和apisix.response_sourcespan 属性(OpenTelemetry、Zipkin),用于分类每个响应的来源:"apisix"(由 APISIX 生成 ,如插件拒绝或路由未找到)、"nginx"(NGINX 代理错误,如连接被拒绝或上游超时)或"upstream"(来自上游服务的真实响应)。这使得在监控面板和告警中可以更精确地归因错误来源。
- 新增
控制面
- 新增 Consul 服务发现支持。网关现在可以发现注册在 Consul 中的上游服务,支持基于元数据的过滤和健康检查感知的节点选择。
- 控制面现在可通过心跳动态推送遥测配置(如追踪采样率和导出端点)至数据面,无需重启网关。
- SSL/SNI 配置新增
skip_mtls_uri_regex字段,允许指定的 URI 模式跳过 mTLS 客户端证书校验,同时对其他所有 URI 保持 mTLS 强制校验。 - 新增
POST /apisix/admin/configs/validate批量配置校验接口。运维人员可在应用配置前校验路由、服务、上游和插件配置,在不影响线上流量的情况下捕获 schema 错误。 - DP Manager 现在在 7943 端口通过 cmux 支持原生 gRPC etcd 协议,为数据面在现有 HTTP etcd 协议基础上提供额外的连接选项。
encrypt_fields机制现在支持嵌套和复杂字段结构,包括任意深度的点分路径、数组和 map。包含深层嵌套敏感字段的插件配置(如auth.gcp.service_account_json)现在可以正确加密存储。
控制台(Dashboard)
- Key Auth 和 Basic Auth 插件新增表单模式配置, 支持可视化凭证设置,无需手动编辑 JSON。
- 新增 OpenID Connect 快速启动预设模板,为常见身份提供商提供预填充的配置模板,简化 OIDC 插件初始配置。
- 上游配置界面新增 Consul 作为可选的服务发现类型。
- SSL/SNI 配置界面支持配置
skip_mtls_uri_regex,允许指定 URI 模式跳过 mTLS 客户端证书校验。
缺陷修复
插件
- AI Proxy
- 修复问题:当 LLM 提供商每秒发送大量小型 SSE 数据块(如单字符推理 token)时,单个流式请求可能导致 worker 进程 CPU 占用率达到 100%,影响该 worker 上所有其他流量的可用性。
- 修复问题:当协议转换器处于活跃状态(例如 Anthropic 转 OpenAI)且上游返回了格式不兼容的 SSE 事件时,网关返回 500 错误而非 502。现在当上游响应格式与配置的协议转换不兼容时,网关正确返回 502 Bad Gateway。
- 修复问题:当 LLM 提供商在可空响应字段(如
prompt_tokens_details或usage)中返回 JSONnull时,网关崩溃,因为 JSON null 哨兵值通过了 Lua 真值检查但无法作为 table 索引。
- AI Rate Limiting
- 修复问题:上游提供的用量键(来自 LLM 响应用量数据)与保留的表达式环境名称(如
math或abs)冲突时,可能遮蔽内置函数,导致限速表达式求值异 常或绕过限制。
- 修复问题:上游提供的用量键(来自 LLM 响应用量数据)与保留的表达式环境名称(如
控制面
- 修复问题:通过开发者门户使用 OIDC 类型的 DCR 提供者创建 OAuth 凭证时,在要求
client_name字段的身份提供者(如 Keycloak)上失败。client_name现已包含在 DCR 注册和更新请求中,使用应用名称作为值。
Ingress Controller
- 修复问题:Ingress Controller 在翻译 ApisixRoute 资源时同时在 Route 和 Service 上设置了
hosts。对于不支持路由级 hosts 的后端,这会导致每个同步周期产生虚假差异,触发不必要的 PUT 请求并产生大量审计日志。在一个生产环境中,这导致了 8 GB / 420 万条冗余的UpdateService审计日志记录。
控制台(Dashboard)
- 修复问题:服务发现请求失败时,加载指示器持续显示不消失。
- 修复问题:IAM 删除角色操作使用了错误的权限动作(
iam:UpdateRole而非iam:DeleteRole)。 - 修复问题:在上游配置中切换 Nacos 服务时,服务元数据未刷新。
- 修复问题:切换登录选项提供者类型时,上一个提供者的配置字段未清除,导致表单中残留旧值。
- 修复问题 :IAM 策略语句编辑器在策略数据尚未加载时因空引用错误而崩溃。
- 修复问题:InviteUser 和 ResetPassword 操作在 API 调用失败时未显示错误信息,导致无法判断操作失败原因。
- 修复问题:登录选项名称唯一性检查不必要地加载了完整的登录选项列表,现改为轻量级 API 调用。
3.9.9
发布日期:2026-04-10
新功能
控制面
- Upstream 标签现在可通过 API 正确持久化和返回。此前,通过 ADC 或 Ingress Controller 设置的 upstream 标签在持久化过程中被静默丢弃,导致每次同步周期产生虚假差异和不必要的审计日志增长。
- 文件服务器地址现在可通过 Dashboard 系统设置页面动态配置,与 DP Manager 地址和 Admin API 地址使用相同的双数据源模式。
缺陷修复
插件
- AI Proxy
- 修复问题:使用 AI Proxy 进行协议转换时(例如 Anthropic 客户 端转 OpenAI 提供商),
stream_options.include_usage=true被注入到转换前的请求体而非转换后的 OpenAI 请求体中,导致转换协议的流式响应中缺少用量统计信息。
- 修复问题:使用 AI Proxy 进行协议转换时(例如 Anthropic 客户 端转 OpenAI 提供商),
- Forward Auth
- 修复问题:当认证服务返回 HTTP 200 但未包含
upstream_headers中配置的某个请求头时,客户端原始请求中携带的该请求头值被直接转发到上游,而非被清除。这可能导致客户端通过在原始请求中携带该请求头来伪造上游请求头。
- 修复问题:当认证服务返回 HTTP 200 但未包含
- JWT Auth
- 修复问题:JWT Auth 插件在签名验证前未校验 JWT 令牌的
alg头是否与消费者配置的算法一致,可能导致算法混淆攻击。
- 修复问题:JWT Auth 插件在签名验证前未校验 JWT 令牌的
数据面
- 修复问题:数据面兼容性报告对有效的插件配置显示了虚假的警告信息。使用
patternProperties、条件 schema(if/then/else)、allOf、dependencies或additionalProperties=true的插件被错误地报告了"未识别字段"警告。受影响的插件包括 ai-proxy、ai-proxy-multi、openapi-to-mcp、acl、http-logger、limit-count-advanced、portal-auth、jwt-auth、proxy-rewrite 和 grpc-transcode。
3.9.8
发布日期:2026-04-07
不兼容变更
插件
-
升级说明
limit-count插件中的sync_interval(Redis 延迟同步)功能已被移除,该功能现在仅在 Limit Count Advanced 插件中提供。如果你正在使用配置了sync_interval的limit-count插件,请在升级前将配置迁移至limit-count-advanced插件。 -
升级说明
ssl_verify的默认值已从false改为true。如果你的 OpenID Connect 插件配置未显式设置ssl_verify,且身份提供商(IdP)使用自签名证书或内 部 CA 签发的证书,升级后 TLS 验证将失败。请在升级前为相关配置添加"ssl_verify": false,或确保 IdP 证书已被网关的 CA 证书库信任。
新功能
插件
- MCP Tools ACL(新插件)
- 新增用于 MCP 服务的工具级访问控制插件,适用于通过 OpenAPI-to-MCP 插件暴露的 MCP 服务。支持白名单(
allow_tools)和黑名单(deny_tools)模式,并可通过表达式匹配条件实现路由级或服务级工具访问策略。支持消费者和消费者组的优先级规则评估。SSE 响应会自动过滤tools/list结果中被拒绝的工具。
- 新增用于 MCP 服务的工具级访问控制插件,适用于通过 OpenAPI-to-MCP 插件暴露的 MCP 服务。支持白名单(
- AI Proxy
- 新增原生 Anthropic Messages API 支持。使用 Anthropic SDK 格式发送到
/v1/messages的请求现在可直接透传至 Anthropic 兼容后端,无需协议转换,保留 Anthropic 特有的字段(如缓存 token 用量)。 - 新增 OpenAI Responses API(
POST /v1/responses)完整支持。流式和非流式响应均可正确处理,所有下游插件(RAG、内容审核、Prompt Decorator、Prompt Guard、日志)均可与 Responses API 格式正常协作。
- 新增原生 Anthropic Messages API 支持。使用 Anthropic SDK 格式发送到
- AI Rate Limiting
- 新增
expression限速策略,支持通过cost_expr字段使用自定义 Lua 算术表达式动态计算 token 成本。例如,input_tokens + cache_creation_input_tokens可实现 Anthropic Claude 的缓存感知输入 token 每分钟(ITPM)限速。
- 新增
- OAS Validator
- 新增 OpenAPI 3.1 规范校验支持,包括
exclusiveMinimum/exclusiveMaximum数值格式、if/then/else条件 schema、["string", "null"]可空类型、const、patternProperties、prefixItems以及 JSON Schema$dynamicRef/$dynamicAnchor等特性。 - 新增可配置的
rejection_status_code选项(400–599,默认 400),可区分语义校验错误(如 422 Unprocessable Entity)和请求格式错误(400 Bad Request)。
- 新增 OpenAPI 3.1 规范校验支持,包括
- Request ID
- 新增
uuidv7算法选项。UUID v7 生成按时间排序、字典序可排序的唯一标识符,比随机 UUID v4 更适合分布式追踪和日志关联。
- 新增
- OpenAPI to MCP
- 新增 OpenAPI
in: header参数支持。OpenAPI 规范中定义的 Header 参数现在可正确包含在 MCP 工具 schema 中,并在调用上游 API 时作为 HTTP 请求头转发。
- 新增 OpenAPI
控制面
- 新增 Vault 动态角色数据库凭证轮换支持。动态角色会创建具有可配置租约 TTL 的临时数据库用户,相比静态角色安全性更高。动态角色现为默认模式,并支持指数退避自动重试启动。
- 新增独立的文件服务器组件,用于托管 MCP 服务器可访问的文件。文件可通过 Dashboard API 上传,通过专用端口提供服务。文件服务器默认关闭,可在系统设置中启用。
- 新增 HTTP Bridge 动态客户端注册(DCR)提供者类型。HTTP Bridge 通过可配置的 HTTP 端点将 DCR 操作(注册、更新、删除、轮换密钥)代理至外部身份提供者。
- 新增数据面兼容性报告功能。当控制面与数据面版本不一致时,数据面通过心跳上报不兼容资源详情(schema 校验失败、未知插件字段、缺失插件),兼容性状态可通过运行时实例 API 查看。
- 发布服务时 upstream 配置现在为可选项,支持 AI Proxy 等无需后端 upstream 的纯插件场景。
- 优化自定义插件同步机制,采用增量缓存刷新。定时同步任务现在仅查询变更部分而非全表扫描,显著降低数据库负载。
数据面
- 优化 Redis Sentinel 连接性能。Master 节点地址现通过可配置 TTL 的本地缓存进行缓存,减少每次新建连接时对 Sentinel 的查询往返。此外,连接池中复用的连接跳过重复的 AUTH 和 SELECT DB 命令,降低高吞吐 Redis 操作的延迟。
开发者门户
- 新增管理员身份模拟功能。门户管理员可模拟组织 Owner 身份进行问题排查,模拟会话有效期 1 小时,模拟期间显示持久性警告横幅。
- 新增 HTTP Bridge 凭证的 OAuth 客户端密钥重新生成功能。组织 Owner 可通过凭证管理界面中的确认弹窗重新生成密钥。
- 新增可配置的 TOTP 双因素认证(2FA),用于开 发者门户登录。
- 新增基于角色的访问控制(RBAC),包含三种角色:Owner(完全控制,包括删除组织)、Admin(除删除组织外的所有权限)和 Member(仅查看权限)。
- 组织设置页面现使用 slug 前缀 URL。切换组织或重命名组织 slug 时,页面 URL 自动更新。
- 应用详情页现根据门户配置文件中的设置展示相关配置。
- 新增可选的注册提示 HTML 插槽,用于在认证页面的注册按钮前展示自定义可信内容。
缺陷修复
插件
- AI Aliyun Content Moderation
- 修复问题:空白内容导致阿里云审核 API 返回 400 错误。此外,LLM 错误响应(状态码 ≥ 400)在响应审核阶段触发 500 错误,多模态内容数组导致文本提取崩溃。
- AI Proxy
- 修复问题:当插件通过
ngx.exit()提前退出时,apisix_llm_active_connectionsPrometheus 指标永远不会递减,导致该指标持续增长并报告不准确的活跃连接数。
- 修复问题:当插件通过
- AI Rate Limiting、Limit Conn、Limit Req
- 修复问题:Redis 主机配置中的
$env://和$secret://引用被当作字面字符串传递,未能解析为实际值,导致 Redis 连接失败。
- 修复问题:Redis 主机配置中的