更新日志
3.10.3
发布日期:2026-07-14
升级须知
多个数据面共享内存(lua_shared_dict)默认值被调高,因此在默认配置下,3.10.3 网关启动时预留的共享内存比 3.10.2 约多 365 MiB:
| 共享字典 | 3.10.2 默认值 | 3.10.3 默认值 |
|---|---|---|
prometheus-metrics(高级指标) | 15 MiB | 128 MiB |
kubernetes、nacos、nacos-stream、consul(服务发现) | 各 20 MiB | 各 64 MiB |
tracing_buffer(SkyWalking) | 10 MiB | 32 MiB |
api-calls-for-portal | 10 MiB | 64 MiB |
这些字典在网关启动时分配,无论对应功能是否被使用,因此该增长适用于每一个 3.10.3 网关。升级前,请调高网关容器的内存 requests 和 limits(在 Kubernetes 中还应检查节点的内存压力与驱逐阈值),避免网关被 OOM 杀死。如果你未使用某项功能——例如某种未配置的服务发现类型——可以通过网关配置或 Helm chart 的共享字典值把对应字典调回原先的大小。
内置 Dashboard 用户现在会在连续密码登录失败后被临时锁定。默认策略为启用状态,同一用户和来源 IP 连续失败 5 次后锁定 15 分钟。管理员可以通过新的登录失败限制系统设置调整或关闭该策略。升级后新密码和被修改的密码也必须至少 12 个字符,并继续满足原有复杂度要求。已有密码在登录时不会重新校验长度。
如果内置用户启用了双因素认证(2FA),该用户的 HTTP Basic Auth 会被拒绝,因为 Basic Auth 无法携带第二因素。程序化集 成请改用 Token 认证;Token 通过 X-API-KEY 请求头传入,不需要携带 2FA 验证码。
网关现在通过 apisix.trusted_addresses 判断是否信任客户端传入的 X-Forwarded-* 和 RFC 7239 Forwarded 请求头。当未配置 trusted_addresses,或请求来自不可信地址时,网关会在转发上游前用自身观测到的值覆盖 X-Forwarded-Proto、X-Forwarded-Host 和 X-Forwarded-Port,并清除 Forwarded 请求头。如果上游应用依赖可信负载均衡器或反向代理传入的原始转发协议、host 或端口,请将该代理的 IP 或 CIDR 配置到 trusted_addresses。
openid-connect 插件不再默认把 refresh_session_interval 设为 900 秒。现在只有显式配置 refresh_session_interval 时才会执行周期性静默重认证。如果你的部署依赖此前 900 秒刷新一次的行为,请在升级前或升级过程中显式设置 refresh_session_interval: 900。
对于使用 SQL Server 的部署,控制面现在会先创建并准备数据库,再让其他组件连接,并启用 READ_COMMITTED_SNAPSHOT,避免网关配置读取被写事务阻塞。若既有 SQL Server 数据库尚未启用该设置,首次启动会以 ROLLBACK IMMEDIATE 应用该数据库级变更;正在进行的数据库事务和连接可能会被断开一次,之后连接池会重新连接,后续启动不会重复执行该操作。
控制面现在会在存储时加密更多保存凭证的插件字段。由于 API7 EE 升级时先升级控制面、再升级数据面,在升级间隙中,3.10.3 的控制面会加密这些字段,而仍为 3.10.2 的旧数据面无法解密,可能导致相关插件失效,直到数据面也完成升级。
本次新增加密的字段,按插件列出如下:
- ai-cache:
semantic.embedding.openai.api_key、semantic.embedding.azure_openai.api_key
如果你使用了上述插件的相关字段,请在控制面升级后尽快将数据面升级到 3.10.3,并在两侧都升级到 3.10.3 之前避免编辑这些插件。
新功能
插件
- AI Cache
- 在精确匹配缓存之外,新增语义(L2)缓存层,通过 RediSearch 按 embedding 相似度匹配提示词。流式 LLM 响应现在可以被缓存并回放,而不再被跳过。新增 Prometheus 指标,报告缓存命中、未命中、绕过和 embedding 延迟。
- AI Aliyun Content Moderation
- 新增
request_check_roles,用于选择要审查的请求角色(user、tool和/或system)。user和tool内容遵循request_check_mode(last或all,默认last);选择system时,系统内容会在每个请求中检查。长内容现在以线性时间分块,且对多字节(UTF-8)安全。
- 新增
- AI AWS Content Moderation
- 请求审查现在在 AI 协议识别之后执行,检查上游 LLM 实际可见的解码后提示词内容,而不是原始 HTTP JSON 外壳。拒绝响应现在以提供商兼容格式返回,并新增可配置的
check_request、deny_code和deny_message。
- 请求审查现在在 AI 协议识别之后执行,检查上游 LLM 实际可见的解码后提示词内容,而不是原始 HTTP JSON 外壳。拒绝响应现在以提供商兼容格式返回,并新增可配置的
- IP Restriction
- 新增可配置的
response_code(403或404,默认403),在请求被拦截时返回,使运营者可以用404隐藏资源是否存在。
- 新增可配置的
- File Logger
- 日志文件
path现在可以在插件元数据中设置一次并在多条路由间共享,不必在每条路由的插件配置中都填写。插件配置中设置的path仍然优先于元数据中的值。
- 日志文件
- Logger 插件
- 为 HTTP Logger、RocketMQ Logger、TCP Logger、Tencent Cloud CLS 和 UDP Logger 的 schema 新增
max_req_body_bytes和max_resp_body_bytes,使请求/响应体大小上限(默认 524288 字节)在配置时被校验并在 Dashboard 中展示。
- 为 HTTP Logger、RocketMQ Logger、TCP Logger、Tencent Cloud CLS 和 UDP Logger 的 schema 新增
- 限流插件
- 为 Limit Count、Limit Count Advanced、GraphQL Limit Count 和 AI Rate Limiting 的 Redis 与 Redis Cluster 策略新增 Redis 连接 keepalive 设置(
redis_keepalive_timeout和redis_keepalive_pool),方便运营者调整空闲超时时间和连接池大小。
- 为 Limit Count、Limit Count Advanced、GraphQL Limit Count 和 AI Rate Limiting 的 Redis 与 Redis Cluster 策略新增 Redis 连接 keepalive 设置(
数据面
- 新增
apisix.trusted_addresses,根据解析后的客户端地址控制网关是否信任客户端传入的X-Forwarded-*和Forwarded请求头。 - 新增
apisix.match_uri_encoded_slash。启用后,编码斜杠(%2F)在路由匹配期间保持编码状态,可作为路径参数的一部分,而不是路径分隔符。 - 在 standalone YAML 模式中,环境变量占位符现在会在 YAML 解析前替换。未加引号的占位符可以解析为原生布尔值或数字;加引号的占位符仍保持字符串,从而精确保留大整数 ID 和 token 值。