CHANGELOG
Table of Contents
2.7.0
- 修改 metadata_schema 校验方式,让它跟其他 schema 一致 #4381
- 移除 echo 插件的 auth_value 字段 #4055
- 更正 Admin API count 字段的计算,并把它的类型变成 integer #4385
Core
- :sunrise: TCP 代理支持客户端证书校验 #4445
- :sunrise: TCP 代理支持接收 TLS over TCP 连接 #4409
- :sunrise: TCP/UDP 代理上游配置支持用域名 #4386
- :sunrise: CLI 中封装 nginx quit 操作 #4360
- :sunrise: 允许在 route 配置上游超时时间 #4340
- :sunrise: Nacos 服务发现支持 group 参数 #4325
- :sunrise: Nacos 服务发现支持 namespace 参数 #4313
Plugin
- :sunrise: client-control 允许动态设置 client_max_body_size #4423
- :sunrise: ext-plugin 使用 SIGTERM 结束 runner #4367
- :sunrise: limit-req 增加 nodelay 参数 #4395
- :sunrise: mqtt-proxy 允许配置域名 #4391
- :sunrise: redirect 支持带上 query string #4298
Bugfix
- 修复客户端断开连接导致的内存泄漏 #4405
- 修复处理 etcd 响应时有一个地方没有检查 res.body.error 的问题 #4371
- 修复 ext-plugin 插件 token 过期后没有刷新 token 的问题 #4345
- 修复 ext-plugin 插件没有传递环境变量的问题 #4349
- 修复插件热加载时,插件可能不会重新加载的问题 #4319
2.6.0
Change
- 更改 prometheus 里面关于 latency 的指标的 label #3993
- 修改 prometheus 默认端口,不再暴露到数据面的端口上 #3994
- limit-count 里面如果使用 redis cluster,需要指定名称 #3910
- 不再支持 OpenResty 1.15 #3960
Core
- :sunrise: 允许 pass_host 为 node 时,upstream 配置多个节点 #4208
- :sunrise: 自定义 500 错误页 #4164
- :sunrise: stream_route 中支持 upstream_id #4121
- :sunrise: 支持客户端证书认证 #4034
- :sunrise: 实验性支持 nacos 服务发现 #3820
- :sunrise: 给 tcp.sock.connect 打补丁,采用配置的 DNS resolver #4114
Plugin
- :sunrise: redirect 插件,支持编码 uri #4244
- :sunrise: key-auth 插件: 支持自定义鉴权头 #4013
- :sunrise: response-rewrite 插件: 允许在 header 里面使用变量 #4194
- :sunrise: 实现 ext-plugin 第一版,APISIX 现在支持使用其他语言编写自定义插件 #4183
Bugfix
- 支持 IPv6 DNS resolver #4242
- 修复被动健康检查可能重复报告的问题 #4116
- 修复 traffic-split 中偶发的规则紊乱 #4092
- 修复带域名的 upstream 配置的访问问题 #4061
- 修复 2.5 版本的 APISIX 无法识别之前版本的 route 配置的问题 #4056
- standalone 模式下,启动程序时应该可以读取配置 #4027
- limit-count 插件 redis 模式下原子化计数操作 #3991
2.5.0
Change
- 更改 zipkin 插件的 span 类型 #3877
Core
- :sunrise: 支持 etcd 客户端证书校验 #3905
- :sunrise: 支持表达式使用“或”和“非”的逻辑 #3809
- :sunrise: 默认启动时会同步etcd配置 #3799
- :sunrise: 负载均衡支持节点优先级 #3755
- :sunrise: 服务发现提供了一系列 control API #3742
Plugin
- :sunrise: 允许热更新 skywalking 插件配置,并允许配置上报间隔 #3925
- :sunrise: consumer-restriction 支持 HTTP method 级别的白名单配置 #3691
- :sunrise: cors 插件支持通过正则表达式匹配 Origin #3839
- :sunrise: response-rewrite 插件支持条件改写 #3577
Bugfix
- error-log-logger 插件需要在每个进程中上报日志 #3912
- 当使用 snippet 引入 Nginx server 段配置时,确保内置 server 是默认 server #3907
- 修复 traffic-split 插件通过 upstream_id 绑定上游的问题 #3842
- 修复 ssl_trusted_certificate 配置项的校验 #3832
- 启用 proxy-cache 时,避免覆盖到其他路由缓存相关的响应头 #3789
- 解决 macOS 下无法
make deps
的问题 #3718
2.4.0
Change
Core
- :sunrise: 支持 DNS SRV 记录 #3686
- :sunrise: 新的 DNS 服务发现模块 #3629
- :sunrise: 支持 Consul HTTP 接口服务发现模块 #3615
- :sunrise: 支持插件复用 #3567
- :sunrise: 支持 plaintext HTTP2 #3547
- :sunrise: 支持 DNS AAAA 记录 #3484
Plugin
Bugfix
- 一致性 hash 负载均衡确保重试所有节点 #3651
- 当 route 绑定 service 后仍能执行 script #3678
- 应当依赖 openssl111 #3603
- zipkin 避免缓存请求特定的数据 #3522
更多的变动可以参考里程碑
2.3.0
Change
Core
- :sunrise: 命令行中访问 etcd 可以禁用 HTTPS 检验 #3415
- :sunrise: 添加 etcd 无法连接时的 Chaos 测试 #3404
- :sunrise: ewma 负载均衡算法更新 #3300
- :sunrise: 允许在 Upstream 中配置 HTTPS scheme 来跟 HTTPS 后端通信 #3430
- :sunrise: 允许自定义 lua_package_path & lua_package_cpath #3417
- :sunrise: HTTPS 代理时传递 SNI #3420
- :sunrise: 支持 gRPCS #3411
- :sunrise: 支持通过 control API 获得健康检查状态 #3345
- :sunrise: 支持代理 HTTP 到 dubbo 后端 #3224
- :sunrise: 支持最少连接负载均衡算法 #3304
Plugin
- :sunrise: kafka-logger 支持复用 kafka 生产者对象 #3429
- :sunrise: authz-keycloak 支持动态 scope & resource 映射 #3308
- :sunrise: proxy-rewrite 支持在域名中带端口 #3428
- :sunrise: fault-injection 支持通过变量条件动态做错误注入 #3363
Bugfix
- 修复 standalone 下 consumer 的 id 跟 username 可以不一致的问题 #3394
- gRPC 中可以用 upstream_id & consumer #3387
- 修复没有匹配规则时命中 global rule 报错的问题 #3332
- 避免缓存过期的服务发现得到的节点 #3295
- 应该在 access 阶段创建 health checker #3240
- 修复 chash 负载均衡算法时重试的问题 #2676
更多的变动可以参考里程碑
2.2.0
Change
Core
- :sunrise: 允许一个 consumer 关联多个认证插件 #2898
- :sunrise: 增加 etcd 重试间隔,并允许配置 #2977
- :sunrise: 允许启用或禁用 route #2943
- :sunrise: 允许通过 graphql 属性进行路由 #2964
- :sunrise: 共享 etcd 鉴权 token #2932
- :sunrise: 新增 control API #3048
Plugin
- :sunrise: limt-count 中使用 ‘remote_addr’ 作为默认 key #2927
- :sunrise: 支持在 fault-injection 的 abort.body 中使用变量 #2986
- :sunrise: 新增插件
server-info
#2926 - :sunrise: 增加 batch process 指标 #3070
- :sunrise: 新增 traffic-split 插件 #2935
- :sunrise: proxy-rewrite 支持在 header 中使用变量 #3144
- :sunrise: openid-connect 插件增加更多配置项 #2903
- :sunrise: proxy-rewrite 支持在 upstream_uri 中使用变量 #3139
Bugfix
- basic-auth 应该在 rewrite phase 执行 #2905
- http/udp-logger 中插件配置运行时变更没有生效 #2901
- 修复 limit-conn 对象没有被正确释放的问题 #2465
- 修复自动生成的 id 可能重复的问题 #3003
- 修复 OpenResty 1.19 下 ctx 互相影响的问题。对于使用 OpenResty 1.19 的用户,请尽快升级到该版本。 #3105
- 修复 route.vars 字段的校验 #3124
更多的变动可以参考里程碑
2.1.0
Core
- :sunrise: 支持使用环境变量来配置参数. #2743
- :sunrise: 支持使用 TLS 来连接 etcd. #2548
- 自动生成对象的创建和更新时间. #2740
- 在上游中开启 websocket 时,增加日志来提示此功能即将废弃.#2691
- 增加日志来提示 consumer id 即将废弃.#2829
- 增加
X-APISIX-Upstream-Status
头来区分 5xx 错误来自上游还是 APISIX 自身。#2817 - 支持 Nginx 配置片段。#2803
Plugin
- :sunrise: 升级协议来 Apache Skywalking 8.0#2389. 这个版本只支持 skywalking 8.0 协议。此插件默认关闭,需要修改 config.yaml 来开启。这是不向下兼容的修改。
- :sunrise: 新增阿里云 sls 日志服务插件。#2169
- proxy-cache: cache_zone 字段改为可选.#2776
- 在数据平面校验插件的配置。#2856
Bugfix
- :bug: fix(etcd): 处理 etcd compaction.#2687
- 将
conf/cert
中的测试证书移动到t/certs
目录中,并且默认关闭 SSL。这是不向下兼容的修改。 #2112 - 检查 decrypt key 来阻止 lua thread 中断。 #2815
不向下兼容特性预告
- 在 2.3 发布版本中,consumer 将只支持用户名,废弃 id,consumer需要在 etcd 中手工清理掉 id 字段,不然使用时 schema 校验会报错
- 在 2.3 发布版本中,将不再支持在 upstream 上开启 websocket
- 在 3.0 版本中,数据平面和控制平面将分开为两个独立的端口,即现在的 9080 端口将只处理数据平面的请求,不再处理 admin API 的请求
更多的变动可以参考里程碑
2.0.0
这是一个 release candidate。
Core
- :sunrise: 从 etcd v2 协议迁移到 v3,这是不向下兼容的修改。Apache APISIX 只支持 etcd 3.4 以及后续的版本。 #2036
- 支持为上游对象增加标签。#2279
- 为上游、路由等资源增加更多字段,比如 create_time 和 update_time。#2444
- 使用拦截器来保护插件的路由。#2416
- 支持 http 和 https 监听多个端口。#2409
- 实现
core.sleep
函数。#2397
Plugin
- :sunrise: 增加 AK/SK(HMAC) 认证插件。#2192
- :sunrise: 增加 referer-restriction 插件。#2352
limit-count
插件支持redis
cluster。#2406- proxy-cache 插件支持存储临时文件。#2317
- http-logger 插件支持通过 admin API 来指定文件格式。#2309
Bugfix
- :bug:
高优先级
当数据平面接收到删除某一个资源(路由、上游等)的指令时,没有正确的清理缓存,导致存在的资源也会找不到。这个问题在长时间、频繁删除操作的情况下才会出现。#2168 - 修复路由优先级不生效的问题。#2447
- 在
init_worker
阶段设置随机数, 而不是init
阶段。#2357 - 删除 jwt 插件中不支持的算法。#2356
- 当重定向插件的
http_to_https
开启时,返回正确的响应码。#2311
更多的变动可以参考里程碑
CVE
- 修复 Admin API 默认访问令牌漏洞
1.5.0
Core
- Admin API:支持使用SSL证书进行身份验证。1747
- Admin API:同时支持标准的PATCH和子路径PATCH。1930
- HealthCheck:支持自定义检查端口。1914
- Upstream:支持禁用
Nginx
默认重试机制。1919 - URI:支持以配置方式删除
URI
末尾的/
符号。1766
New Plugin
- :sunrise: 新增 请求验证器 插件 1709
Improvements
- 变更:nginx
worker_shutdown_timeout
配置默认值由3s
变更为推荐值240s
。1883 - 变更:
healthcheck
超时时间类型 由integer
变更为number
。1892 - 变更:
request-validation
插件输入参数支持JsonSchema
验证。1920 - 变更:为 Makefile
install
命令添加注释。1912 - 变更:更新 config.yaml
etcd.timeout
默认配置的注释。1929 - 变更:为
prometheus
添加更多度量指标,以更好地了解APISIX
节点的情况。1888 - 变更:为
cors
插件添加更多配置选项。1963
Bugfix
- 修复:
healthcheck
获取host
配置失败。 1871 - 修复:插件运行时数据保存到
etcd
。 1910 - 修复:多次运行
apisix start
将启动多个Nginx
进程。1913 - 修复:从临时文件读取请求正文(如果已缓存)。1863
- 修复:批处理器名称和错误返回类型。1927
- 修复:
limit-count
插件redis.ttl
读取异常。1928 - 修复:被动健康检查不能提供健康报告。1918
- 修复:避免插件中直接修改或使用原始配置数据。1958
- 修复:
invalid-upstream
测试用例稳定性问题。1925
Doc
- 文档:添加
APISIX Lua
代码风格指南。1874 - 文档:修正
README
中语法错误。1894 - 文档:修正
benchmark
文档中图片链接错误。1896 - 文档:修正
FAQ
、admin-api
、architecture-design
、discovery
、prometheus
、proxy-rewrite
、redirect
、http-logger
文档中错别字。1916 - 文档:更新
request-validation
插件示例。1926 - 文档:修正
architecture-design
文档中错别字。1938 - 文档:添加
how-to-build
文档中在Linux
和macOS
系统中单元测试Nginx
的默认引入路径。1936 - 文档:添加
request-validation
插件中文文档。1932 - 文档:修正
README
中gRPC transcoding
文档路径。1945 - 文档:修正
README
中uri-blocker
文档路径。1950 - 文档:修正
README
中grpc-transcode
文档路径。1946 - 文档: 删除
k8s
文档中不必要的配置。1891
1.4.1
Bugfix
- 修复在配置了多个 SSL 证书的情况下,只有一个证书生效的问题。 1818
1.4.0
Core
New plugins
- :sunrise: Apache Skywalking plugin 1241
- :sunrise: Keycloak Identity Server Plugin 1701
- :sunrise: Echo Plugin 1632
- :sunrise: Consume Restriction Plugin 1437
Improvements
1.3.0
1.3 版本主要带来安全更新。
Security
Plugin
1.2.0
1.2 版本在内核以及插件上带来了非常多的更新。
Core
- :sunrise: 支持 etcd 集群. #1283
- 默认使用本地 DNS resolver, 这对于 k8s 环境更加友好. #1387
- 支持在
header_filter
、body_filter
和log
阶段运行全局插件. #1364 - 将目录
lua/apisix
修改为apisix
(不向下兼容). #1351 - 增加 dashboard 子模块. #1360
- 允许自定义共享字典. #1367
Plugin
- :sunrise: 新增 Apache Kafka 插件. #1312
- :sunrise: 新增 CORS 插件. #1327
- :sunrise: 新增 TCP logger 插件. #1221
- :sunrise: 新增 UDP logger 插件. 1070
- :sunrise: 新增 proxy mirror 插件. #1288
- :sunrise: 新增 proxy cache 插件. #1153
- 在 proxy-rewrite 插件中废弃 websocket 开关(不向下兼容). 1332
- OAuth 插件中增加基于公钥的自省支持. #1266
- response-rewrite 插件通过 base64 来支持传输二进制数据. #1381
- gRPC 转码插件支持
deadline
. #1149 - limit count 插件支持 redis 权限认证. #1150
- Zipkin 插件支持名字和本地服务器 ip 的记录. #1386
- Wolf-Rbac 插件增加
change_pwd
和user_info
参数. #1204
Admin API
Bugfix
- 在复用 table 之前遗漏了对数据的清理 (会引发内存泄漏). #1134
- 如果 yaml 中路由非法就打印警告信息. #1141
- 使用空字符串替代空的 balancer IP. #1166
- 修改 node-status 和 heartbeat 插件没有 schema 的问题. #1249
- basic-auth 增加 required 字段. #1251
- 检查上游合法节点的个数. #1292
1.1.0
这个版本主要是加强代码的稳定性,以及增加更多的文档。
Core
- 每次跑测试用例都指定 perl 包含路径。 #1097
- 增加对代理协议的支持。 #1113
- 增加用于校验 nginx.conf 的命令。 #1112
- 支持「nginx 最多可以打开文件数」可配置,并增大其默认配置。#1105 #1098
- 优化日志模块。 #1093
- 支持 SO_REUSEPORT 。 #1085
Doc
- 增加 Grafana 元数据下载链接. #1119
- 更新 README.md。 #1118
- 增加 wolf-rbac 插件说明文档 #1116
- 更新 rpm 下载链接。 #1108
- 增加更多英文文章链接。 #1092
- 增加文档贡献指引。 #1086
- 检查更新「快速上手」文档。 #1084
- 检查更新「插件开发指南」。 #1078
- 更新 admin-api-cn.md 。 #1067
- 更新 architecture-design-cn.md 。 #1065
CI
Plugins
1.0.0
这个版本主要是加强代码的稳定性,以及增加更多的文档。
Core
- :sunrise: 支持路由的优先级。可以在 URI 相同的条件下,根据 header、args、优先级等条件,来匹配到不同的上游服务。 #998
- 在没有匹配到任何路由的时候,返回错误信息。以便和其他的 404 请求区分开。#1013
- dashboard 的地址
/apisix/admin
支持 CORS。#982 - jsonschema 校验器返回更清晰的错误提示。#1011
- 升级
ngx_var
模块到 0.5 版本。#1005 - 升级
lua-resty-etcd
模块到 0.8 版本。#980 - 在开发模式下,自动把 worker 数调整为 1。#926
- 从代码仓库中移除 nginx.conf 文件,它每次都会自动生成,不可手工修改。#974
Doc
- 增加如何自定义开发插件的文档。#909
- 修复 serverless 插件文档中错误的示例。#1006
- 增加 Oauth 插件的使用文档。#987
- 增加 dashboard 编译的文档。#985
- 增加如何进行 a/b 测试的文档。#957
- 增加如何开启 MQTT 插件的文档。#916
Test case
0.9.0
这个版本带来很多新特性,比如支持使用 Tengine 运行 APISIX,增加了对开发人员更友好的高级调试模式,还有新的URI重定向插件等。
Core
- :sunrise: 支持使用 Tengine 运行 APISIX。 #683
- :sunrise: 启用 HTTP2 并支持设置 ssl_protocols。 #663
- :sunrise: 增加高级调试模式,可在不重启的服务的情况下动态打印指定模块方法的请求参数或返回值。#614
- 安装程序增加了仪表盘开关,支持用户自主选择是否安装仪表板程序。 #686
- 取消对 R3 路由的支持,并移除 R3 路由模块。 #725
Plugins
- :sunrise: Redirect URI: URI 重定向插件。 #732
- Proxy Rewrite:支持
header
删除功能。 #658 - Limit Count: 通过
Redis Server
聚合APISIX
节点之间将共享流量限速结果,实现集群流量限速。#624
lua-resty-*
- lua-resty-radixtree
- 支持将
host + uri
作为索引。
- 支持将
- lua-resty-jsonschema
- 该扩展作用是JSON数据验证器,用于替换现有的
lua-rapidjson
扩展。
- 该扩展作用是JSON数据验证器,用于替换现有的
Bugfix
- 在多个使用者的情况下,
key-auth
插件无法正确运行。 #826 - 无法在
API Server
中获取serverless
插件配置。 #787 - 解决使用
proxy-write
重写URI时GET参数丢失问题。 #642 Zipkin
插件未将跟踪数据设置为请求头. #715- 使用本地文件作为配置中心时,跳过 etcd 初始化。 #737
- 在APISIX CLI中跳过 luajit 环境的
check cjson
。#652 - 配置
Upstream
时,选择balancer
类型为chash
时,支持更多Nginx内置变量作为计算key。 #775
Dependencies
- 使用
lua-resty-jsonschema
全局替换lua-rapidjson
扩展,lua-resty-jsonschema
解析速度更快,更容易编译。
0.8.0
Released on 2019/09/30
这个版本带来很多新的特性,比如四层协议的代理, 支持 MQTT 协议代理,以及对 ARM 平台的支持, 和代理改写插件等。
Core
- :sunrise: 增加单机模式: 使用 yaml 配置文件来更新 APISIX 的配置,这对于 kubernetes 更加友好。 #464
- :sunrise: 支持 stream 代理. #513
- :sunrise: 支持在 consumer 上绑定插件. #544
- 上游增加对域名的支持,而不仅是 IP。#522
- 当上游节点的权重为 0 时自动忽略。#536
Plugins
- :sunrise: MQTT 代理: 支持用
client_id
对 MQTT 进行负载均衡,同时支持 MQTT 3.1 和 5.0 两个协议标准。 #513 - proxy-rewrite: 对代理到上游的请求进行改写,包括 host, uri 和 schema。 #594
ARM
- :sunrise: APISIX 可以在基于 ARM64 架构的 Ubuntu 18.04 系统中正常运行, 搭配上 MQTT 插件,你可以把它当做 IoT 网关来使用。
lua-resty-*
- lua-resty-ipmatcher
- 支持 IPv6。
- 支持 IP 黑白名单和路由。
- lua-resty-radixtree
- 允许指定多个 host, remote_addr 和 uri。
- 允许设置用户自定义函数来做额外的过滤。
- 使用
lua-resty-ipmatcher
替代lua-resty-iputils
,lua-resty-ipmatcher
支持 IPv6 并且速度更快。
Bugfix
- 健康检查: 修复在多 worker 下运行时健康检查 checker 的名字错误。 #568
Dependencies
- 把
lua-tinyyaml
从源码中移除,通过 Luarocks 来安装。
0.7.0
Released on 2019/09/06
这个版本带来很多新的特性,比如 IP 黑白名单、gPRC 协议转换、支持 IPv6、对接 IdP(身份认证提供商)服务、serverless、默认路由修改为radix tree(不向下兼容)等。
Core
- :sunrise: gRPC 协议转换: 支持 gRPC 协议的转换,这样客户端可以通过 HTTP/JSON 来访问你的 gRPC API. #395
- :sunrise: radix tree 路由: 默认的路由器更改为 radix tree,支持把 uri、host、cookie、请求头、请求参数、Nginx 内置变量等作为路由的条件,并支持等于、大于、小于等常见操作符,更加强大和灵活. 需要注意的是,这个改动不向下兼容,所有使用历史版本的用户,需要手动修改路由才能正常使用。#414
- 动态上游支持更多的参数,可以指定上游的 uri 和 host,以及是否开启 websocket. #451
- 支持从
ctx.var
中直接获取 cookie 中的值. #449 - 路由支持 IPv6. #331
Plugins
- :sunrise: serverless: 支持 serverless,用户可以把任意 Lua 函数动态的在网关节点上运行。用户也可以把这个功能当做是轻量级的插件来使用。#86
- :sunrise: IdP 支持: 支持外部的身份认证服务,比如 Auth0,okta 等,用户可以借此来对接 Oauth2.0 等认证方式。 #447
- 限流限速支持更多的限制 key,比如 X-Forwarded-For 和 X-Real-IP,并且允许用户把 Nginx 变量、请求头和请求参数作为 key. #228
- IP 黑白名单 支持 IP 黑白名单,提供更高的安全性。#398
CLI
- 增加
version
指令,获取 APISIX 的版本号. #420
Admin
- 支持
PATCH
API,可以针对某个配置单独修改,而不再用提交整段配置。#365
Dashboard
0.6.0
Released on 2019/08/05
这个版本带来很多新的特性,比如健康检查、服务熔断、debug 模式,分布式追踪、JWT 认证等,以及内置的 dashboard.
Core
- :sunrise: 健康检查和服务熔断: 对上游节点开启健康检查,智能判断服务状态进行熔断和连接. #249
- 阻止ReDoS(Regular expression Denial of Service). #252
- 支持 debug 模式. #319
- 允许自定义路由. #364
- 路由支持 host 和 uri 的组合. #325
- 允许在 balance 阶段注入插件. #299
- 为 upstream 和 service 在 schema 中增加描述信息. #289
Plugins
- :sunrise: 分布式追踪 OpenTracing: 支持 Zipkin 和 Apache SkyWalking. #304
- JWT 认证. #303
CLI
Dashboard
- :sunrise: 增加内置的 dashboard. #327