更新日志
3.10.5
发布日期:2026-08-11
不兼容变更
插件
-
升级说明
该插件现在会校验日志服务器的 TLS 证书。旧版本在完成 TLS 握手时完全不校验证书,因此日志服务器出示自签名证书、私有 CA 签发的证书或已过期的证书都会被静默接受,而携带所配置访问密钥的日志记录仍会发往该服务器。
校验行为由新增的
ssl_verify选项控制,默认值为true。升级后,若网关无法校验日志服务器的证书,批处理器会丢弃这批日志,并在错误日志中记录failed to perform TLS handshake to TCP server。如果你的日志服务器出示的证书并非由公共可信 CA 签发,请在升级前把签发该证书的 CA 加入数据面的可信证书库,或在插件上把ssl_verify设为false以保持旧行为。
升级须知
headers 字段落盘加密在启用数据面数据加密(apisix.data_encryption.enable)时,控制面现在会对 Loki Logger 的 headers 字段做落盘加密。由于 API7 EE 的升级顺序是先控制面、后数据面,在升级窗口内 3.10.5 的控制面会加密该字段,而仍为 3.10.4 的数据面无法解密,可能导致该插件在数据面升级完成前无法正常工作。
如果你使用了 Loki Logger 的 headers,请在控制面升级后尽快把数据面也升级到 3.10.5,并在两侧都升级完成前避免编辑该插件。
控制台会话 Cookie 的签名密钥此前是编译期常量,所有部署完全相同。现在改为首次启动时生成的 32 字节随机密钥,并按部署持久化保存,因此会话 Cookie 不再可能用一个各处相同的值签发。
升级前签发的会话使用的是旧的常量密钥,升级后不再被接受。控制面升级完成后,所有已登录用户都需要重新登录一次。升级前无需做任何准备,也不需要修改配置。
radixtree_host_uri 路由器Docker Compose 部署包现在会把 apisix.router.http 设为 radixtree_host_uri,与 Helm Chart 一直使用的默认值保持一致。此前该部署包不设置这一项,回落到 radixtree_uri,因此同一份配置在不同部署形态下的路由匹配结果可能不同。
仅依赖普通 host 与路径匹配的配置不受影响。差异出现在「指定了 host 的路由」与「未指定 host 的路由」共享重叠路径时:radixtree_host_uri 会先查按 host 划分的子路由器,只有都未命中时才回落到未指定 host 的路由;而 radixtree_uri 把所有路由放在同一棵树中,按路径特异性与 priority 排序。如需保留旧的匹配引擎,可在 gateway_conf/config.yaml 中把 apisix.router.http 设为 radixtree_uri。
控制台现在在浏览器端应用界面语言,并用 Cookie 记住所选语言,因此 URL 不再带 /zh 前缀。升级后,含 /zh 的书签和已保存的链接会返回 HTTP 404,去掉该前缀后的同一路径即可访问对应页面。可选语言以及语言切换器本身没有变化。
新功能
插件
- LDAP Auth Advanced
- 新增该插件,用于对接 LDAP 目录完成客户端认证,并把认证结果映射到消费者。插件采用「先检索、后绑定」的方式解析用户:在
base_dn下按attribute=username检索,再以检索到的条目执行绑定,因此无需把目录结构写进网关配置。凭据从Authorization请求头读取,支持ldap和basic两种方案(header_type);可通过 LDAPS 或 StartTLS 连接目录,且默认开启证书校验;连接在请求之间复用。消费者通过其凭据上记录的user_dn匹配,因此消费者级插件、限流和用量统计对 LDAP 认证的流量与其它身份一视同仁。
- 新增该插件,用于对接 LDAP 目录完成客户端认证,并把认证结果映射到消费者。插件采用「先检索、后绑定」的方式解析用户:在
- OpenID Connect
- 新增对推送式授权请求(PAR,RFC 9126)的支持。设置
par.enabled后,网关会通过后通道把完整的授权请求发送到身份提供方的 PAR 端点,浏览器重定向中只携带request_uri,授权参数因此不再经过用户代理,也无法在那里被篡改。端点及其客户端认证方式通过par.endpoint与par.endpoint_auth_method配置。 - 新增对 DPoP 发送方约束令牌(RFC 9449)的支持。设置
dpop.enabled后,网关会用dpop.private_key为令牌请求签发 DPoP 证明,并声明与之匹配的dpop.public_jwk,使签发的令牌绑定到该密钥,令牌即使被窃取也无法从其它客户端重放。同时启用 PAR 时,密钥指纹还会按规范要求以dpop_jkt随推送请求一并发送。
- 新增对推送式授权请求(PAR,RFC 9126)的支持。设置
- AI AWS Content Moderation
- 新增
check_response,在审查请求之外同时审查 LLM 的回复。非流式回复在返回客户端之前完成审查;流式回复的处理方式由stream_check_mode决定:默认值final_packet对拼装完成的响应审查一次,并在最后一个分片上标注风险等级;取值realtime时,在响应转发过程中按最多stream_check_cache_size个字符分批审查,一旦某批命中就把流的剩余部分替换掉,因此中途才出现有害内容的流会被截断,而不是完整送达。被拦截的回复以该服务商自身的响应格式返回,并使用配置的deny_code与deny_message。 - 新增
request_check_roles与request_check_mode,用于选择审查哪些消息角色,以及只审查最后一条消息还是所选角色的全部消息,与 AI Aliyun Content Moderation 中已有的选项保持一致。
- 新增
- AI Proxy Multi
- 新增
semantic负载均衡算法:不再按权重或哈希选择实例,而是把请求路由到examples与当前提示词语义最接近的实例。嵌入向量服务在semantic_opts.embeddings下配置,全局或按实例设置的threshold决定匹配需要多接近,匹配度均不达标的请求转发到semantic_opts.fallback。若嵌入服务不可达,请求同样转发到备用实例而不是直接失败。开启semantic_opts.debugging后,各实例的得分与最终选中的实例会通过响应头返回。
- 新增
控制面
- 自定义插件现在可以以完整包的形式上传,包内包含入口文件及其依赖文件,不再限于单个 Lua 文件。压缩包的顶层是
$NAME.lua,依赖模块放在$NAME/目录下,另有metadata.json;控制台会读取其中的元数据自动填充插件的分类、描述、文档链接和作者。整个包作为一个整体下发到数据面,因此不会出现插件只发布了部分文件的情况;更新时所有文件一并替换,且无需重启网关。 - 数据面 CPU 核数的许可用量现在可以按生产与非生产环境分开计量。每个网关组带有
environment属性,取值为production(默认)或non_production;许可证中相应地包含max_dp_cores与max_non_production_dp_cores。两份额度各自独立地运行用量、宽限与限制状态机,超出其中一份不会限制另一份所管辖的写操作。无法归属到已知网关组的用量计入生产额度。已有网关组按生产环境处理,本次改动之前签发的许可证不包含非生产额度,因此在把某个网关组标记为non_production之前行为不变——而一旦标记,该组就需要一张授予非生产核数的许可证。 - Stream 服务的上游现在支持
tls协议,网关会终止客户端的明文 TCP 连接,并与后端建立 TLS 会话。此前控制面只接受tcp和udp,尽管数据面一直支持四层上游使用tls。 - Docker Compose 部署包新增
portal.sh,用于在已运行的部署上启动开发者门户。该脚本会创建门户实例及其令牌、写入前端配置与数据库,并以 Compose profile 的方式启动前端,因此试用门户不再需要按手册逐步手工操作。执行portal.sh stop后再start,开发者账号与会话都会保留。 - API7 Gateway Admin API 参考文档中,每个接口现在只出现在一个位置。原先内容过载的 Service 分组已拆分为 Service、Route、Stream Route、Upstream 和 OpenAPI,同一个接口不会再重复出现在多个导航分组下。
数据面
- 全局规则筛选出的插件集现在每个请求只计算一次并跨阶段复用,而不是在每个阶段中重复计算。在通过全局规则启用 Prometheus 插件的部署上,单个 Worker 实测吞吐提升 12%。
控制台(Dashboard)
- 语言切换器不再显示与语言并不对应的国旗图标,并会标出当前生效的语言 。
开发者门户
- 新增
emailAndPassword.revokeSessionsOnPasswordReset,用于控制开发者重置密码时是否吊销其它会话。默认值为true,与此前行为一致。
缺陷修复
插件
- AI Aliyun Content Moderation
- 修复问题:当
request_check_roles选中system时,放在developer角色消息中的内容不会被送去审查。developer是 OpenAI 在较新模型和 Responses API 中用来替代system的角色,因此客户端可以把指令放在该角色下,绕过审查直达 LLM。现在两个角色的内容会一并提取,已有的system条目同时覆盖这两个角色。 - 修复问题:在
realtime流式审查模式下使用协议转换器时(例如 Anthropic 客户端对接 OpenAI 兼容上游),同一段回复文本会按转换后的分片数重复提交给审查服务,而不是按上游分片提交一次。审查结果本身不受影响,但stream_check_cache_size会远早于配置值被触发,审查调用次数也随转换器的输出规模放大,带来额外的延迟和费用。
- 修复问题:当
- AI AWS Content Moderation
- 修复问题:超出 Amazon Comprehend 单段与单次请求限制的内容会被拒绝或静默截断,导致较长的提示词和回复只有一部分被审查。现在内容会按文档规定的上限切分,并分成所需数量的批次提交;同一请求内的多次调用复用同一个 HTTP 客户端,而不是每次都新建连接。
- Loki Logger
- 修复问题:
headers字段通常携带 Loki 端点的认证令牌,此前以明文存储。在启用数据面数据加密时,该字段现在会落盘加密(参见升级须知)。
- 修复问题:
- Limit Conn
- 修复问题:当该插件配置在服务上时,该服务下的每个路由各自独立统计并发连接数,实际生效的上限因此被路由数量放大。现在计数键按插件所配置的资源确定,服务级别的限制会在其所有路由之间共享。
- Prometheus
- 修复问题:承载指标的共享内存字典中已过期的条目不会被回收,用量只增不减,最终一直处于写满状态,此后新的指标序列会被丢弃。现在过期条目会被正常回收。
- OpenID Connect
- 修复问题:在
bearer_only模式下,首尾带空白字符的Authorization请求头会被拒绝,因为空白字符被一并带进了提取出的令牌。现在会先去除首尾空白再读取令牌。
- 修复问题:在