Apache APISIX 3.16.0 版本已经发布。该版本带来了一系列新功能、修复、以及相关用户体验优化。
本次版本扩展了速率限制能力,增强了 OpenTelemetry 可观测性,新增了认证、日志记录和服务发现等方面的插件功能,同时包含多项缺陷修复和稳定性改进。此外,还包含了两项重大变更。
重大变更
openid-connect 插件 ssl_verify 默认值更改为 true
openid-connect插件中 ssl_verify选项的默认值已从 false更改为 true。此变更通过强制在与身份提供商通信时进行 TLS 证书验证来提升安全性。
如果你使用的是自签名证书或私有 CA 颁发的证书,现在必须在插件配置中显式设置 ssl_verify: false以保留原有行为。
tencent-cloud-cls 插件默认 scheme 更改为 https
tencent-cloud-cls插件发送日志请求所使用的默认协议已从 http更改为 https,与安全最佳实践保持一致,确保日志数据在传输过程中被加密。
如果你的腾讯云 CLS 端点只能通过明文 HTTP 访问,现在必须在插件配置中显式将 scheme 设置为 http以保留原有行为。
新功能
1. 高级多规则速率限制
limit-count、limit-conn和 ai-rate-limiting插件现在支持 rules数组,允许在单个插件配置中定义多条速率限制规则。每条规则可以指定各自的 count、time_window和 key,从而可以在单个路由或消费者上同时执行多个速率限制。
此外,这三个插件的 key和速率字段现在均支持 APISIX 变量(例如 $http_x_custom_header),可基于任意请求属性实现动态的、按请求粒度的速率限制。
对于 limit-count,还支持每条规则配置 header_prefix字段,使每条规则的响应标头可以独立命名,便于客户端区分不同规则的配额信息。
2. 更丰富的 OpenTelemetry 追踪 span
OpenTelemetry 插件现在可以生成更多 span,覆盖各个 NGINX 阶段、每个插件的执行过程、DNS 解析、密钥获取、SSL client hello 处理以及路由匹配。这为请求处理提供了更深入的可观测性。
同时新增了全局 tracing: false配置项,可用于选择性地禁用追踪。此外,OTel 语义规范属性已更新,与最新规范保持一致。
3. 独立模式拒绝未知插件
在独立模式下(YAML 和 JSON 配置提供程序),APISIX 现在会对引用未知或未加载插件的配置返回错误并拒绝该配置。此前,此类配置会被静默接受,未知插件会在运行时被跳过,导致配置错误难以发现。
4. 通过 control API 获取流路由健康检查数据
现在可以通过 control API 获取流路由的健康检查状态数据,与 HTTP 路由的方式完全一致。这为 HTTP 和流代理的上游健康监控提供了统一的接口。
5. resolve_var 支持默认值
resolve_var工具函数现在接受可选的默认值参数。当请求的变量不存在或为空时,将返回指定的默认值,而不是返回空结果。这对于依赖可能并不总是存在的变量的插件配置尤为有用。
6. Eureka 服务发现支持基于主机名的节点
Eureka 服务发现模块现在除了支持 IP 地址节点外,还支持以主机名(域名)注册的节点。此前,只有使用 IP 地址的节点才能被正确处理。这使 APISIX 能够与服务使用 DNS 名称注册的 Eureka 部署集成。
7. clickhouse-logger 插件支持密钥存储凭证
clickhouse-logger插件现在支持使用 $ENV://或 $secret://引用方式存储用户凭证(用户名和密码)。这避免了在插件配置中明文嵌入凭证,并支持集中化的密钥管理。
8. 日志插件支持配置最大请求/响应体大小
13 个日志插件新增了 max_req_body_bytes和 max_resp_body_bytes属性,用于控制日志条目中捕获的请求体和响应体的最大字节数。默认值为 524288 字节(512 KB)。这提供了对日志体量的精细控制,有助于避免产生过大的日志条目。
9. jwt-auth 插件支持更多签名算法
jwt-auth插件现在通过新增的 jwt-auth/parser.lua模块支持更多 JWT 签名算法,包括 RS256、ES256 等。此前仅较好地支持 HS256。这使 APISIX 能够与使用非对称密钥签发 Token 的身份提供商集成。
10. openid-connect 插件支持 Redis 会话存储
openid-connect插件现在支持使用 Redis 作为会话存储后端,作为现有基于 Cookie 的存储方式的补充。这支持无状态部署以及多个 APISIX 实例之间的会话共享。
11. elasticsearch-logger 插件支持自定义请求标头
elasticsearch-logger插件现在支持配置任意自定义请求标头(键值对),这些标头会随日志请求一并发送到 Elasticsearch。可以作为现有 auth配置的补充或替代方案,从而兼容使用自定义标头进行身份验证的 Elasticsearch 部署。
其他更新
- 修复 Admin API PATCH 对
upstream.nodes在数组和哈希表格式之间双向转换的处理逻辑
- 修复 Consul 服务发现重启后间歇性 503 问题,将事件模块替换为
ngx.shared字典和 LRU 缓存
- 修复
ext-plugin在重写请求路径时丢失 query string 参数的问题
- 防止流插件在 HTTP 子系统中被初始化
- 修复匿名消费者
minLengthschema 类型错误(原为 string,现更正为 integer)
- 从流访问日志格式中移除不适用的
apisix_request_id变量
- 在速率限制规则中,若变量配置了默认值,即使底层变量不存在也视为已解析
- 修复消费者通过凭证端点认证且未直接配置插件时,消费者组插件未生效的问题
- 修复 control API 返回被动健康检查状态数据不正确的问题,同步升级
lua-resty-healthcheck
- 修复 Prometheus 指标过期后重新添加时消失的问题,升级
nginx-lua-prometheus
- 升级
lua-casbin至 1.46.0,修复 Casbin enforcer 覆写缺陷
- 在
ngx.print后添加 ngx.flush以改善 SSE(服务器推送事件)响应的传输
- 升级
api7-lua-resty-http至 0.2.3-0,修复 forward-auth插件标头值中的 CRLF 注入问题
- 修复
limit-req消费者隔离问题,使用 parent.resource_key确保消费者在不同路由间共享正确的计数器
- 移除
ai-rate-limiting插件 schema 中错误存在的 sync_interval字段
- 将 Docker 独立模式的 YAML 配置校验从 Shell 脚本迁移至 Lua,以更稳健地处理所有合法 YAML 变体
- 修正
config.yaml.example中 AI 插件优先级注释和排序