docs(lint): import Chinese copywriting autocorrect linter (#6568)

Co-authored-by: leslie <59061168+leslie-tsang@users.noreply.github.com>
Co-authored-by: 琚致远 <juzhiyuan@apache.org>
This commit is contained in:
kwanhur 2022-03-24 15:19:39 +08:00 committed by GitHub
parent 2149ab12bc
commit 96838b9b47
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
83 changed files with 612 additions and 587 deletions

View File

@ -34,3 +34,17 @@ jobs:
echo "You need to run ./utils/fix-zh-doc-segment.py to fix them." echo "You need to run ./utils/fix-zh-doc-segment.py to fix them."
exit 1 exit 1
fi fi
Chinse-Copywriting-lint:
name: Chinese Copywriting
runs-on: ubuntu-latest
timeout-minutes: 1
steps:
- uses: actions/checkout@v3
- name: check Chinese copywriting
run: |
version=v1.5.6
wget -O- "https://github.com/huacnlee/autocorrect/releases/download/$version/autocorrect-linux-amd64.tar.gz" | tar -xzv
mv -v autocorrect /usr/local/bin/
autocorrect --version
git ls-files | grep "^docs/zh/latest/.*.md$" | xargs -t autocorrect --lint

View File

@ -58,6 +58,18 @@ Once we've discussed your changes and you've got your code ready, make sure that
- npm based [markdownlint-cli](https://www.npmjs.com/package/markdownlint-cli) - npm based [markdownlint-cli](https://www.npmjs.com/package/markdownlint-cli)
For linting all files' license header we use:
- [license-eye](https://github.com/apache/skywalking-eyes)
For linting our shell files we use:
- [shellcheck](https://github.com/koalaman/shellcheck)
For linting our zh document files we use:
- [autocorrect](https://github.com/huacnlee/autocorrect)
* Active Voice * Active Voice
In general, use active voice when formulating the sentence instead of passive voice. A sentence written in the active voice will emphasize In general, use active voice when formulating the sentence instead of passive voice. A sentence written in the active voice will emphasize

View File

@ -323,8 +323,8 @@ title: CHANGELOG
### Plugin ### Plugin
- :sunrise: redirect 插件,支持编码 uri [#4244](https://github.com/apache/apisix/pull/4244) - :sunrise: redirect 插件,支持编码 uri [#4244](https://github.com/apache/apisix/pull/4244)
- :sunrise: key-auth 插件: 支持自定义鉴权头 [#4013](https://github.com/apache/apisix/pull/4013) - :sunrise: key-auth 插件支持自定义鉴权头 [#4013](https://github.com/apache/apisix/pull/4013)
- :sunrise: response-rewrite 插件: 允许在 header 里面使用变量 [#4194](https://github.com/apache/apisix/pull/4194) - :sunrise: response-rewrite 插件允许在 header 里面使用变量 [#4194](https://github.com/apache/apisix/pull/4194)
- :sunrise: 实现 ext-plugin 第一版APISIX 现在支持使用其他语言编写自定义插件 [#4183](https://github.com/apache/apisix/pull/4183) - :sunrise: 实现 ext-plugin 第一版APISIX 现在支持使用其他语言编写自定义插件 [#4183](https://github.com/apache/apisix/pull/4183)
### Bugfix ### Bugfix
@ -478,11 +478,11 @@ title: CHANGELOG
### Core ### Core
- :sunrise: **支持使用环境变量来配置参数.** [#2743](https://github.com/apache/apisix/pull/2743) - :sunrise: **支持使用环境变量来配置参数** [#2743](https://github.com/apache/apisix/pull/2743)
- :sunrise: **支持使用 TLS 来连接 etcd.** [#2548](https://github.com/apache/apisix/pull/2548) - :sunrise: **支持使用 TLS 来连接 etcd.** [#2548](https://github.com/apache/apisix/pull/2548)
- 自动生成对象的创建和更新时间. [#2740](https://github.com/apache/apisix/pull/2740) - 自动生成对象的创建和更新时间。[#2740](https://github.com/apache/apisix/pull/2740)
- 在上游中开启 websocket 时,增加日志来提示此功能即将废弃.[#2691](https://github.com/apache/apisix/pull/2691) - 在上游中开启 websocket 时,增加日志来提示此功能即将废弃[#2691](https://github.com/apache/apisix/pull/2691)
- 增加日志来提示 consumer id 即将废弃.[#2829](https://github.com/apache/apisix/pull/2829) - 增加日志来提示 consumer id 即将废弃[#2829](https://github.com/apache/apisix/pull/2829)
- 增加 `X-APISIX-Upstream-Status` 头来区分 5xx 错误来自上游还是 APISIX 自身。[#2817](https://github.com/apache/apisix/pull/2817) - 增加 `X-APISIX-Upstream-Status` 头来区分 5xx 错误来自上游还是 APISIX 自身。[#2817](https://github.com/apache/apisix/pull/2817)
- 支持 Nginx 配置片段。[#2803](https://github.com/apache/apisix/pull/2803) - 支持 Nginx 配置片段。[#2803](https://github.com/apache/apisix/pull/2803)
@ -490,7 +490,7 @@ title: CHANGELOG
- :sunrise: **升级协议来 Apache Skywalking 8.0**[#2389](https://github.com/apache/apisix/pull/2389). 这个版本只支持 skywalking 8.0 协议。此插件默认关闭,需要修改 config.yaml 来开启。这是不向下兼容的修改。 - :sunrise: **升级协议来 Apache Skywalking 8.0**[#2389](https://github.com/apache/apisix/pull/2389). 这个版本只支持 skywalking 8.0 协议。此插件默认关闭,需要修改 config.yaml 来开启。这是不向下兼容的修改。
- :sunrise: 新增阿里云 sls 日志服务插件。[#2169](https://github.com/apache/apisix/issues/2169) - :sunrise: 新增阿里云 sls 日志服务插件。[#2169](https://github.com/apache/apisix/issues/2169)
- proxy-cache: cache_zone 字段改为可选.[#2776](https://github.com/apache/apisix/pull/2776) - proxy-cache: cache_zone 字段改为可选[#2776](https://github.com/apache/apisix/pull/2776)
- 在数据平面校验插件的配置。[#2856](https://github.com/apache/apisix/pull/2856) - 在数据平面校验插件的配置。[#2856](https://github.com/apache/apisix/pull/2856)
### Bugfix ### Bugfix
@ -532,7 +532,7 @@ title: CHANGELOG
- :bug: **`高优先级`** 当数据平面接收到删除某一个资源 (路由、上游等) 的指令时,没有正确的清理缓存,导致存在的资源也会找不到。这个问题在长时间、频繁删除操作的情况下才会出现。[#2168](https://github.com/apache/apisix/pull/2168) - :bug: **`高优先级`** 当数据平面接收到删除某一个资源 (路由、上游等) 的指令时,没有正确的清理缓存,导致存在的资源也会找不到。这个问题在长时间、频繁删除操作的情况下才会出现。[#2168](https://github.com/apache/apisix/pull/2168)
- 修复路由优先级不生效的问题。[#2447](https://github.com/apache/apisix/pull/2447) - 修复路由优先级不生效的问题。[#2447](https://github.com/apache/apisix/pull/2447)
- 在 `init_worker` 阶段设置随机数, 而不是 `init` 阶段。[#2357](https://github.com/apache/apisix/pull/2357) - 在 `init_worker` 阶段设置随机数而不是 `init` 阶段。[#2357](https://github.com/apache/apisix/pull/2357)
- 删除 jwt 插件中不支持的算法。[#2356](https://github.com/apache/apisix/pull/2356) - 删除 jwt 插件中不支持的算法。[#2356](https://github.com/apache/apisix/pull/2356)
- 当重定向插件的 `http_to_https` 开启时,返回正确的响应码。[#2311](https://github.com/apache/apisix/pull/2311) - 当重定向插件的 `http_to_https` 开启时,返回正确的响应码。[#2311](https://github.com/apache/apisix/pull/2311)
@ -591,7 +591,7 @@ title: CHANGELOG
- 文档:修正 `README``gRPC transcoding` 文档路径。[1945](https://github.com/apache/apisix/pull/1945) - 文档:修正 `README``gRPC transcoding` 文档路径。[1945](https://github.com/apache/apisix/pull/1945)
- 文档:修正 `README``uri-blocker` 文档路径。[1950](https://github.com/apache/apisix/pull/1950) - 文档:修正 `README``uri-blocker` 文档路径。[1950](https://github.com/apache/apisix/pull/1950)
- 文档:修正 `README``grpc-transcode` 文档路径。[1946](https://github.com/apache/apisix/pull/1946) - 文档:修正 `README``grpc-transcode` 文档路径。[1946](https://github.com/apache/apisix/pull/1946)
- 文档: 删除 `k8s` 文档中不必要的配置。[1891](https://github.com/apache/apisix/pull/1891) - 文档删除 `k8s` 文档中不必要的配置。[1891](https://github.com/apache/apisix/pull/1891)
## 1.4.1 ## 1.4.1
@ -631,7 +631,7 @@ title: CHANGELOG
### Plugin ### Plugin
- :sunrise: **新增 batch request 插件**. [#1388](https://github.com/apache/incubator-apisix/pull/1388) - :sunrise: **新增 batch request 插件**. [#1388](https://github.com/apache/incubator-apisix/pull/1388)
- 实现完成 `sys logger` 插件. [#1414](https://github.com/apache/incubator-apisix/pull/1414) - 实现完成 `sys logger` 插件。[#1414](https://github.com/apache/incubator-apisix/pull/1414)
## 1.2.0 ## 1.2.0
@ -640,11 +640,11 @@ title: CHANGELOG
### Core ### Core
- :sunrise: **支持 etcd 集群**. [#1283](https://github.com/apache/incubator-apisix/pull/1283) - :sunrise: **支持 etcd 集群**. [#1283](https://github.com/apache/incubator-apisix/pull/1283)
- 默认使用本地 DNS resolver, 这对于 k8s 环境更加友好. [#1387](https://github.com/apache/incubator-apisix/pull/1387) - 默认使用本地 DNS resolver,这对于 k8s 环境更加友好。[#1387](https://github.com/apache/incubator-apisix/pull/1387)
- 支持在 `header_filter`、`body_filter` 和 `log` 阶段运行全局插件. [#1364](https://github.com/apache/incubator-apisix/pull/1364) - 支持在 `header_filter`、`body_filter` 和 `log` 阶段运行全局插件。[#1364](https://github.com/apache/incubator-apisix/pull/1364)
- 将目录 `lua/apisix` 修改为 `apisix`(**不向下兼容**). [#1351](https://github.com/apache/incubator-apisix/pull/1351) - 将目录 `lua/apisix` 修改为 `apisix`(**不向下兼容**). [#1351](https://github.com/apache/incubator-apisix/pull/1351)
- 增加 dashboard 子模块. [#1360](https://github.com/apache/incubator-apisix/pull/1360) - 增加 dashboard 子模块。[#1360](https://github.com/apache/incubator-apisix/pull/1360)
- 允许自定义共享字典. [#1367](https://github.com/apache/incubator-apisix/pull/1367) - 允许自定义共享字典。[#1367](https://github.com/apache/incubator-apisix/pull/1367)
### Plugin ### Plugin
@ -655,26 +655,26 @@ title: CHANGELOG
- :sunrise: **新增 proxy mirror 插件**. [#1288](https://github.com/apache/incubator-apisix/pull/1288) - :sunrise: **新增 proxy mirror 插件**. [#1288](https://github.com/apache/incubator-apisix/pull/1288)
- :sunrise: **新增 proxy cache 插件**. [#1153](https://github.com/apache/incubator-apisix/pull/1153) - :sunrise: **新增 proxy cache 插件**. [#1153](https://github.com/apache/incubator-apisix/pull/1153)
- 在 proxy-rewrite 插件中废弃 websocket 开关 (**不向下兼容**). [1332](https://github.com/apache/incubator-apisix/pull/1332) - 在 proxy-rewrite 插件中废弃 websocket 开关 (**不向下兼容**). [1332](https://github.com/apache/incubator-apisix/pull/1332)
- OAuth 插件中增加基于公钥的自省支持. [#1266](https://github.com/apache/incubator-apisix/pull/1266) - OAuth 插件中增加基于公钥的自省支持。[#1266](https://github.com/apache/incubator-apisix/pull/1266)
- response-rewrite 插件通过 base64 来支持传输二进制数据. [#1381](https://github.com/apache/incubator-apisix/pull/1381) - response-rewrite 插件通过 base64 来支持传输二进制数据。[#1381](https://github.com/apache/incubator-apisix/pull/1381)
- gRPC 转码插件支持 `deadline`. [#1149](https://github.com/apache/incubator-apisix/pull/1149) - gRPC 转码插件支持 `deadline`. [#1149](https://github.com/apache/incubator-apisix/pull/1149)
- limit count 插件支持 redis 权限认证. [#1150](https://github.com/apache/incubator-apisix/pull/1150) - limit count 插件支持 redis 权限认证。[#1150](https://github.com/apache/incubator-apisix/pull/1150)
- Zipkin 插件支持名字和本地服务器 ip 的记录. [#1386](https://github.com/apache/incubator-apisix/pull/1386) - Zipkin 插件支持名字和本地服务器 ip 的记录。[#1386](https://github.com/apache/incubator-apisix/pull/1386)
- Wolf-Rbac 插件增加 `change_pwd``user_info` 参数. [#1204](https://github.com/apache/incubator-apisix/pull/1204) - Wolf-Rbac 插件增加 `change_pwd``user_info` 参数。[#1204](https://github.com/apache/incubator-apisix/pull/1204)
### Admin API ### Admin API
- :sunrise: 对调用 Admin API 增加 key-auth 权限认证 (**not backward compatible**). [#1169](https://github.com/apache/incubator-apisix/pull/1169) - :sunrise: 对调用 Admin API 增加 key-auth 权限认证 (**not backward compatible**). [#1169](https://github.com/apache/incubator-apisix/pull/1169)
- 隐藏 SSL 私钥的返回值. [#1240](https://github.com/apache/incubator-apisix/pull/1240) - 隐藏 SSL 私钥的返回值。[#1240](https://github.com/apache/incubator-apisix/pull/1240)
### Bugfix ### Bugfix
- 在复用 table 之前遗漏了对数据的清理 (**会引发内存泄漏**). [#1134](https://github.com/apache/incubator-apisix/pull/1134) - 在复用 table 之前遗漏了对数据的清理 (**会引发内存泄漏**). [#1134](https://github.com/apache/incubator-apisix/pull/1134)
- 如果 yaml 中路由非法就打印警告信息. [#1141](https://github.com/apache/incubator-apisix/pull/1141) - 如果 yaml 中路由非法就打印警告信息。[#1141](https://github.com/apache/incubator-apisix/pull/1141)
- 使用空字符串替代空的 balancer IP. [#1166](https://github.com/apache/incubator-apisix/pull/1166) - 使用空字符串替代空的 balancer IP. [#1166](https://github.com/apache/incubator-apisix/pull/1166)
- 修改 node-status 和 heartbeat 插件没有 schema 的问题. [#1249](https://github.com/apache/incubator-apisix/pull/1249) - 修改 node-status 和 heartbeat 插件没有 schema 的问题。[#1249](https://github.com/apache/incubator-apisix/pull/1249)
- basic-auth 增加 required 字段. [#1251](https://github.com/apache/incubator-apisix/pull/1251) - basic-auth 增加 required 字段。[#1251](https://github.com/apache/incubator-apisix/pull/1251)
- 检查上游合法节点的个数. [#1292](https://github.com/apache/incubator-apisix/pull/1292) - 检查上游合法节点的个数。[#1292](https://github.com/apache/incubator-apisix/pull/1292)
## 1.1.0 ## 1.1.0
@ -691,7 +691,7 @@ title: CHANGELOG
### Doc ### Doc
- 增加 Grafana 元数据下载链接. [#1119](https://github.com/apache/incubator-apisix/pull/1119) - 增加 Grafana 元数据下载链接。[#1119](https://github.com/apache/incubator-apisix/pull/1119)
- 更新 README.md。 [#1118](https://github.com/apache/incubator-apisix/pull/1118) - 更新 README.md。 [#1118](https://github.com/apache/incubator-apisix/pull/1118)
- 增加 wolf-rbac 插件说明文档 [#1116](https://github.com/apache/incubator-apisix/pull/1116) - 增加 wolf-rbac 插件说明文档 [#1116](https://github.com/apache/incubator-apisix/pull/1116)
- 更新 rpm 下载链接。 [#1108](https://github.com/apache/incubator-apisix/pull/1108) - 更新 rpm 下载链接。 [#1108](https://github.com/apache/incubator-apisix/pull/1108)
@ -710,7 +710,7 @@ title: CHANGELOG
### Plugins ### Plugins
- 「节点状态」插件使用 nginx 内部请求替换原来的外部请求。 [#1109](https://github.com/apache/incubator-apisix/pull/1109) - 「节点状态」插件使用 nginx 内部请求替换原来的外部请求。 [#1109](https://github.com/apache/incubator-apisix/pull/1109)
- 增加 wolf-rbac 插件。 [#1095](https://github.com/apache/incubator-apisix/pull/1095) - 增加 wolf-rbac 插件。 [#1095](https://github.com/apache/incubator-apisix/pull/1095)
- 增加 udp-logger 插件。 [#1070](https://github.com/apache/incubator-apisix/pull/1070) - 增加 udp-logger 插件。 [#1070](https://github.com/apache/incubator-apisix/pull/1070)
@ -773,7 +773,7 @@ title: CHANGELOG
- 在多个使用者的情况下,`key-auth` 插件无法正确运行。 [#826](https://github.com/apache/incubator-apisix/pull/826) - 在多个使用者的情况下,`key-auth` 插件无法正确运行。 [#826](https://github.com/apache/incubator-apisix/pull/826)
- 无法在 `API Server` 中获取 `serverless`插件配置。 [#787](https://github.com/apache/incubator-apisix/pull/787) - 无法在 `API Server` 中获取 `serverless`插件配置。 [#787](https://github.com/apache/incubator-apisix/pull/787)
- 解决使用 `proxy-write` 重写 URI 时 GET 参数丢失问题。 [#642](https://github.com/apache/incubator-apisix/pull/642) - 解决使用 `proxy-write` 重写 URI 时 GET 参数丢失问题。 [#642](https://github.com/apache/incubator-apisix/pull/642)
- `Zipkin` 插件未将跟踪数据设置为请求头. [#715](https://github.com/apache/incubator-apisix/pull/715) - `Zipkin` 插件未将跟踪数据设置为请求头。[#715](https://github.com/apache/incubator-apisix/pull/715)
- 使用本地文件作为配置中心时,跳过 etcd 初始化。 [#737](https://github.com/apache/incubator-apisix/pull/737) - 使用本地文件作为配置中心时,跳过 etcd 初始化。 [#737](https://github.com/apache/incubator-apisix/pull/737)
- 在 APISIX CLI 中跳过 luajit 环境的`check cjson`。[#652](https://github.com/apache/incubator-apisix/pull/652) - 在 APISIX CLI 中跳过 luajit 环境的`check cjson`。[#652](https://github.com/apache/incubator-apisix/pull/652)
- 配置 `Upstream` 时,选择 `balancer` 类型为 `chash` 时,支持更多 Nginx 内置变量作为计算 key。 [#775](https://github.com/apache/incubator-apisix/pull/775) - 配置 `Upstream` 时,选择 `balancer` 类型为 `chash` 时,支持更多 Nginx 内置变量作为计算 key。 [#775](https://github.com/apache/incubator-apisix/pull/775)
@ -786,7 +786,7 @@ title: CHANGELOG
> Released on 2019/09/30 > Released on 2019/09/30
这个版本带来很多新的特性,比如四层协议的代理, 支持 MQTT 协议代理,以及对 ARM 平台的支持, 和代理改写插件等。 这个版本带来很多新的特性,比如四层协议的代理,支持 MQTT 协议代理,以及对 ARM 平台的支持,和代理改写插件等。
### Core ### Core
@ -817,7 +817,7 @@ title: CHANGELOG
### Bugfix ### Bugfix
- 健康检查: 修复在多 worker 下运行时健康检查 checker 的名字错误。 [#568](https://github.com/apache/incubator-apisix/issues/568) - 健康检查修复在多 worker 下运行时健康检查 checker 的名字错误。 [#568](https://github.com/apache/incubator-apisix/issues/568)
### Dependencies ### Dependencies
@ -832,9 +832,9 @@ title: CHANGELOG
### Core ### Core
- :sunrise: **[gRPC 协议转换](https://github.com/apache/incubator-apisix/blob/master/docs/zh/latest//plugins/grpc-transcoding-cn.md)**: 支持 gRPC 协议的转换,这样客户端可以通过 HTTP/JSON 来访问你的 gRPC API. [#395](https://github.com/apache/incubator-apisix/issues/395) - :sunrise: **[gRPC 协议转换](https://github.com/apache/incubator-apisix/blob/master/docs/zh/latest//plugins/grpc-transcoding-cn.md)**: 支持 gRPC 协议的转换,这样客户端可以通过 HTTP/JSON 来访问你的 gRPC API. [#395](https://github.com/apache/incubator-apisix/issues/395)
- :sunrise: **[radix tree 路由](https://github.com/apache/incubator-apisix/blob/master/docs/zh/latest//router-radixtree.md)**: 默认的路由器更改为 radix tree支持把 uri、host、cookie、请求头、请求参数、Nginx 内置变量等作为路由的条件,并支持等于、大于、小于等常见操作符,更加强大和灵活. **需要注意的是,这个改动不向下兼容,所有使用历史版本的用户,需要手动修改路由才能正常使用**。[#414](https://github.com/apache/incubator-apisix/issues/414) - :sunrise: **[radix tree 路由](https://github.com/apache/incubator-apisix/blob/master/docs/zh/latest//router-radixtree.md)**: 默认的路由器更改为 radix tree支持把 uri、host、cookie、请求头、请求参数、Nginx 内置变量等作为路由的条件,并支持等于、大于、小于等常见操作符,更加强大和灵活**需要注意的是,这个改动不向下兼容,所有使用历史版本的用户,需要手动修改路由才能正常使用**。[#414](https://github.com/apache/incubator-apisix/issues/414)
- 动态上游支持更多的参数,可以指定上游的 uri 和 host以及是否开启 websocket. [#451](https://github.com/apache/incubator-apisix/pull/451) - 动态上游支持更多的参数,可以指定上游的 uri 和 host以及是否开启 websocket. [#451](https://github.com/apache/incubator-apisix/pull/451)
- 支持从 `ctx.var` 中直接获取 cookie 中的值. [#449](https://github.com/apache/incubator-apisix/pull/449) - 支持从 `ctx.var` 中直接获取 cookie 中的值。[#449](https://github.com/apache/incubator-apisix/pull/449)
- 路由支持 IPv6. [#331](https://github.com/apache/incubator-apisix/issues/331) - 路由支持 IPv6. [#331](https://github.com/apache/incubator-apisix/issues/331)
### Plugins ### Plugins
@ -846,7 +846,7 @@ title: CHANGELOG
### CLI ### CLI
- 增加 `version` 指令,获取 APISIX 的版本号. [#420](https://github.com/apache/incubator-apisix/issues/420) - 增加 `version` 指令,获取 APISIX 的版本号。[#420](https://github.com/apache/incubator-apisix/issues/420)
### Admin ### Admin
@ -867,13 +867,13 @@ title: CHANGELOG
### Core ### Core
- :sunrise: **[健康检查和服务熔断](https://github.com/apache/incubator-apisix/blob/master/docs/zh/latest//health-check.md)**: 对上游节点开启健康检查,智能判断服务状态进行熔断和连接. [#249](https://github.com/apache/incubator-apisix/pull/249) - :sunrise: **[健康检查和服务熔断](https://github.com/apache/incubator-apisix/blob/master/docs/zh/latest//health-check.md)**: 对上游节点开启健康检查,智能判断服务状态进行熔断和连接。[#249](https://github.com/apache/incubator-apisix/pull/249)
- 阻止 ReDoS(Regular expression Denial of Service). [#252](https://github.com/apache/incubator-apisix/pull/250) - 阻止 ReDoS(Regular expression Denial of Service). [#252](https://github.com/apache/incubator-apisix/pull/250)
- 支持 debug 模式. [#319](https://github.com/apache/incubator-apisix/pull/319) - 支持 debug 模式。[#319](https://github.com/apache/incubator-apisix/pull/319)
- 允许自定义路由. [#364](https://github.com/apache/incubator-apisix/pull/364) - 允许自定义路由。[#364](https://github.com/apache/incubator-apisix/pull/364)
- 路由支持 host 和 uri 的组合. [#325](https://github.com/apache/incubator-apisix/pull/325) - 路由支持 host 和 uri 的组合。[#325](https://github.com/apache/incubator-apisix/pull/325)
- 允许在 balance 阶段注入插件. [#299](https://github.com/apache/incubator-apisix/pull/299) - 允许在 balance 阶段注入插件。[#299](https://github.com/apache/incubator-apisix/pull/299)
- 为 upstream 和 service 在 schema 中增加描述信息. [#289](https://github.com/apache/incubator-apisix/pull/289) - 为 upstream 和 service 在 schema 中增加描述信息。[#289](https://github.com/apache/incubator-apisix/pull/289)
### Plugins ### Plugins
@ -882,7 +882,7 @@ title: CHANGELOG
### CLI ### CLI
- `allow` 指令中支持多个 ip 地址. [#340](https://github.com/apache/incubator-apisix/pull/340) - `allow` 指令中支持多个 ip 地址。[#340](https://github.com/apache/incubator-apisix/pull/340)
- 支持在 nginx.conf 中配置 real_ip 指令,以及增加函数来获取 ip. [#236](https://github.com/apache/incubator-apisix/pull/236) - 支持在 nginx.conf 中配置 real_ip 指令,以及增加函数来获取 ip. [#236](https://github.com/apache/incubator-apisix/pull/236)
### Dashboard ### Dashboard
@ -892,6 +892,6 @@ title: CHANGELOG
### Test ### Test
- 在 Travis CI 中支持 OSX. [#217](https://github.com/apache/incubator-apisix/pull/217) - 在 Travis CI 中支持 OSX. [#217](https://github.com/apache/incubator-apisix/pull/217)
- 把所有依赖安装到 `deps` 目录. [#248](https://github.com/apache/incubator-apisix/pull/248) - 把所有依赖安装到 `deps` 目录。[#248](https://github.com/apache/incubator-apisix/pull/248)
[Back to TOC](#table-of-contents) [Back to TOC](#table-of-contents)

View File

@ -190,7 +190,7 @@ local i = 1
local s = "apisix" local s = "apisix"
``` ```
变量命名使用 `snake_case`(蛇形命名法) 风格: 变量命名使用 `snake_case`(蛇形命名法)风格:
```lua ```lua
--No --No
@ -246,7 +246,7 @@ end
local t = {1, 2, nil, 3} local t = {1, 2, nil, 3}
``` ```
如果一定要使用空值,请用 `ngx.null` 来表示: 如果一定要使用空值,请用 `ngx.null` 来表示
```lua ```lua
--Yes --Yes
@ -344,7 +344,7 @@ local function foo()
end end
``` ```
为了风格的统一,`require` 和 `ngx` 也需要 `local`: 为了风格的统一,`require` 和 `ngx` 也需要 `local`
```lua ```lua
--No --No

View File

@ -403,7 +403,7 @@ HTTP/1.1 404 Not Found
在 route 中,我们可以通过 `uri` 结合 `vars` 字段来实现更多的条件匹配,`vars` 的更多使用细节请参考 [lua-resty-expr](https://github.com/api7/lua-resty-expr)。 在 route 中,我们可以通过 `uri` 结合 `vars` 字段来实现更多的条件匹配,`vars` 的更多使用细节请参考 [lua-resty-expr](https://github.com/api7/lua-resty-expr)。
## upstream 节点是否支持配置 [FQDN](https://en.wikipedia.org/wiki/Fully_qualified_domain_name) 地址? ## upstream 节点是否支持配置 [FQDN](https://en.wikipedia.org/wiki/Fully_qualified_domain_name) 地址
这是支持的,下面是一个 `FQDN``httpbin.default.svc.cluster.local`(一个 Kubernetes Service的示例 这是支持的,下面是一个 `FQDN``httpbin.default.svc.cluster.local`(一个 Kubernetes Service的示例
@ -546,7 +546,7 @@ apisix:
# ... 忽略其余无关项 # ... 忽略其余无关项
``` ```
**注意:** **注意**
尝试使用 cosocket 连接任何 TLS 服务时,如果 APISIX 不信任对端 TLS 服务证书,都需要配置 `apisix.ssl.ssl_trusted_certificate` 尝试使用 cosocket 连接任何 TLS 服务时,如果 APISIX 不信任对端 TLS 服务证书,都需要配置 `apisix.ssl.ssl_trusted_certificate`

View File

@ -61,18 +61,18 @@ Apache APISIX 的技术架构如下图所示:
## 特性 ## 特性
你可以把 Apache APISIX 当做流量入口,来处理所有的业务数据,包括动态路由、动态上游、动态证书、 你可以把 Apache APISIX 当做流量入口,来处理所有的业务数据,包括动态路由、动态上游、动态证书、
A/B 测试、金丝雀发布(灰度发布)、蓝绿部署、限流限速、抵御恶意攻击、监控报警、服务可观测性、服务治理等。 A/B 测试、金丝雀发布(灰度发布)、蓝绿部署、限流限速、抵御恶意攻击、监控报警、服务可观测性、服务治理等。
- **全平台** - **全平台**
- 云原生: 平台无关,没有供应商锁定,无论裸机还是 KubernetesAPISIX 都可以运行。 - 云原生:平台无关,没有供应商锁定,无论裸机还是 KubernetesAPISIX 都可以运行。
- 支持 ARM64: 不用担心底层技术的锁定。 - 支持 ARM64不用担心底层技术的锁定。
- **多协议** - **多协议**
- [TCP/UDP 代理](stream-proxy.md): 动态 TCP/UDP 代理。 - [TCP/UDP 代理](stream-proxy.md)动态 TCP/UDP 代理。
- [Dubbo 代理](plugins/dubbo-proxy.md): 动态代理 HTTP 请求到 Dubbo 后端。 - [Dubbo 代理](plugins/dubbo-proxy.md)动态代理 HTTP 请求到 Dubbo 后端。
- [动态 MQTT 代理](plugins/mqtt-proxy.md): 支持用 `client_id` 对 MQTT 进行负载均衡,同时支持 MQTT [3.1.\*](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html) 和 [5.0](https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html) 两个协议标准。 - [动态 MQTT 代理](plugins/mqtt-proxy.md)支持用 `client_id` 对 MQTT 进行负载均衡,同时支持 MQTT [3.1.\*](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html) 和 [5.0](https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html) 两个协议标准。
- [gRPC 代理](grpc-proxy.md):通过 APISIX 代理 gRPC 连接,并使用 APISIX 的大部分特性管理你的 gRPC 服务。 - [gRPC 代理](grpc-proxy.md):通过 APISIX 代理 gRPC 连接,并使用 APISIX 的大部分特性管理你的 gRPC 服务。
- [gRPC Web 代理](plugins/grpc-web.md):通过 APISIX 代理 gRPC Web 请求到上游 gRPC 服务。 - [gRPC Web 代理](plugins/grpc-web.md):通过 APISIX 代理 gRPC Web 请求到上游 gRPC 服务。
- [gRPC 协议转换](plugins/grpc-transcode.md):支持协议的转换,这样客户端可以通过 HTTP/JSON 来访问你的 gRPC API。 - [gRPC 协议转换](plugins/grpc-transcode.md):支持协议的转换,这样客户端可以通过 HTTP/JSON 来访问你的 gRPC API。
@ -83,16 +83,16 @@ A/B 测试、金丝雀发布(灰度发布)、蓝绿部署、限流限速、抵
- **全动态能力** - **全动态能力**
- [热更新和热插件](architecture-design/plugin.md): 无需重启服务,就可以持续更新配置和插件。 - [热更新和热插件](architecture-design/plugin.md)无需重启服务,就可以持续更新配置和插件。
- [代理请求重写](plugins/proxy-rewrite.md): 支持重写请求上游的`host`、`uri`、`schema`、`enable_websocket`、`headers`信息。 - [代理请求重写](plugins/proxy-rewrite.md)支持重写请求上游的`host`、`uri`、`schema`、`enable_websocket`、`headers`信息。
- [输出内容重写](plugins/response-rewrite.md): 支持自定义修改返回内容的 `status code`、`body`、`headers`。 - [输出内容重写](plugins/response-rewrite.md)支持自定义修改返回内容的 `status code`、`body`、`headers`。
- [Serverless](plugins/serverless.md): 在 APISIX 的每一个阶段,你都可以添加并调用自己编写的函数。 - [Serverless](plugins/serverless.md)在 APISIX 的每一个阶段,你都可以添加并调用自己编写的函数。
- 动态负载均衡:动态支持有权重的 round-robin 负载平衡。 - 动态负载均衡:动态支持有权重的 round-robin 负载平衡。
- 支持一致性 hash 的负载均衡:动态支持一致性 hash 的负载均衡。 - 支持一致性 hash 的负载均衡:动态支持一致性 hash 的负载均衡。
- [健康检查](health-check.md):启用上游节点的健康检查,将在负载均衡期间自动过滤不健康的节点,以确保系统稳定性。 - [健康检查](health-check.md):启用上游节点的健康检查,将在负载均衡期间自动过滤不健康的节点,以确保系统稳定性。
- 熔断器: 智能跟踪不健康上游服务。 - 熔断器:智能跟踪不健康上游服务。
- [代理镜像](plugins/proxy-mirror.md): 提供镜像客户端请求的能力。 - [代理镜像](plugins/proxy-mirror.md)提供镜像客户端请求的能力。
- [流量拆分](plugins/traffic-split.md): 允许用户逐步控制各个上游之间的流量百分比。 - [流量拆分](plugins/traffic-split.md)允许用户逐步控制各个上游之间的流量百分比。
- **精细化路由** - **精细化路由**
@ -108,10 +108,10 @@ A/B 测试、金丝雀发布(灰度发布)、蓝绿部署、限流限速、抵
- **安全防护** - **安全防护**
- 多种身份认证方式: [key-auth](plugins/key-auth.md), [JWT](plugins/jwt-auth.md), [basic-auth](plugins/basic-auth.md), [wolf-rbac](plugins/wolf-rbac.md), casbin, [keycloak](plugins/authz-keycloak.md)。 - 多种身份认证方式:[key-auth](plugins/key-auth.md)、[JWT](plugins/jwt-auth.md)、[basic-auth](plugins/basic-auth.md)、[wolf-rbac](plugins/wolf-rbac.md)、[casbin](plugins/authz-casbin.md)、[keycloak](plugins/authz-keycloak.md)。
- [IP 黑白名单](plugins/ip-restriction.md) - [IP 黑白名单](plugins/ip-restriction.md)
- [Referer 黑白名单](plugins/referer-restriction.md) - [Referer 黑白名单](plugins/referer-restriction.md)
- [IdP 支持](plugins/openid-connect.md): 支持外部的身份认证服务,比如 Auth0OktaAuthing 等,用户可以借此来对接 Oauth2.0 等认证方式。 - [IdP 支持](plugins/openid-connect.md)支持外部的身份认证服务,比如 Auth0OktaAuthing 等,用户可以借此来对接 Oauth2.0 等认证方式。
- [限制速率](plugins/limit-req.md) - [限制速率](plugins/limit-req.md)
- [限制请求数](plugins/limit-count.md) - [限制请求数](plugins/limit-count.md)
- [限制并发](plugins/limit-conn.md) - [限制并发](plugins/limit-conn.md)
@ -123,38 +123,38 @@ A/B 测试、金丝雀发布(灰度发布)、蓝绿部署、限流限速、抵
- **运维友好** - **运维友好**
- OpenTracing 可观测性: 支持 [Apache Skywalking](plugins/skywalking.md) 和 [Zipkin](plugins/zipkin.md)。 - OpenTracing 可观测性:支持 [Apache Skywalking](plugins/skywalking.md) 和 [Zipkin](plugins/zipkin.md)。
- 对接外部服务发现:除了内置的 etcd 外,还支持 [Consul](../../en/latest/discovery/consul_kv.md) 和 [Nacos](../../en/latest/discovery/nacos.md),以及 [Eureka](discovery.md)。 - 对接外部服务发现:除了内置的 etcd 外,还支持 [Consul](../../en/latest/discovery/consul_kv.md) 和 [Nacos](../../en/latest/discovery/nacos.md),以及 [Eureka](discovery.md)。
- 监控和指标: [Prometheus](plugins/prometheus.md) - 监控和指标:[Prometheus](plugins/prometheus.md)
- 集群APISIX 节点是无状态的,创建配置中心集群请参考 [etcd Clustering Guide](https://etcd.io/docs/v3.5/op-guide/clustering/)。 - 集群APISIX 节点是无状态的,创建配置中心集群请参考 [etcd Clustering Guide](https://etcd.io/docs/v3.5/op-guide/clustering/)。
- 高可用:支持配置同一个集群内的多个 etcd 地址。 - 高可用:支持配置同一个集群内的多个 etcd 地址。
- [控制台](https://github.com/apache/apisix-dashboard): 操作 APISIX 集群。 - [控制台](https://github.com/apache/apisix-dashboard): 操作 APISIX 集群。
- 版本控制:支持操作的多次回滚。 - 版本控制:支持操作的多次回滚。
- CLI: 使用命令行来启动、关闭和重启 APISIX。 - CLI使用命令行来启动、关闭和重启 APISIX。
- [单机模式](stand-alone.md): 支持从本地配置文件中加载路由规则,在 kubernetes(k8s) 等环境下更友好。 - [单机模式](stand-alone.md)支持从本地配置文件中加载路由规则,在 kubernetes(k8s) 等环境下更友好。
- [全局规则](architecture-design/global-rule.md):允许对所有请求执行插件,比如黑白名单、限流限速等。 - [全局规则](architecture-design/global-rule.md):允许对所有请求执行插件,比如黑白名单、限流限速等。
- 高性能:在单核上 QPS 可以达到 18k同时延迟只有 0.2 毫秒。 - 高性能:在单核上 QPS 可以达到 18k同时延迟只有 0.2 毫秒。
- [故障注入](plugins/fault-injection.md) - [故障注入](plugins/fault-injection.md)
- [REST Admin API](admin-api.md): 使用 REST Admin API 来控制 Apache APISIX默认只允许 127.0.0.1 访问,你可以修改 `conf/config.yaml` 中的 `allow_admin` 字段,指定允许调用 Admin API 的 IP 列表。同时需要注意的是Admin API 使用 key auth 来校验调用者身份,**在部署前需要修改 `conf/config.yaml` 中的 `admin_key` 字段,来保证安全。** - [REST Admin API](admin-api.md)使用 REST Admin API 来控制 Apache APISIX默认只允许 127.0.0.1 访问,你可以修改 `conf/config.yaml` 中的 `allow_admin` 字段,指定允许调用 Admin API 的 IP 列表。同时需要注意的是Admin API 使用 key auth 来校验调用者身份,**在部署前需要修改 `conf/config.yaml` 中的 `admin_key` 字段,来保证安全。**
- 外部日志记录器:将访问日志导出到外部日志管理工具。([HTTP Logger](plugins/http-logger.md)、[TCP Logger](plugins/tcp-logger.md)、[Kafka Logger](plugins/kafka-logger.md)、[UDP Logger](plugins/udp-logger.md)、[RocketMQ Logger](plugins/rocketmq-logger.md)、[SkyWalking Logger](plugins/skywalking-logger.md)、[Alibaba Cloud Logging(SLS)](plugins/sls-logger.md)、[Google Cloud Logging](plugins/google-cloud-logging.md)、[Splunk HEC Logging](plugins/splunk-hec-logging.md)、[File Logger](plugins/file-logger.md) - 外部日志记录器:将访问日志导出到外部日志管理工具。([HTTP Logger](plugins/http-logger.md)、[TCP Logger](plugins/tcp-logger.md)、[Kafka Logger](plugins/kafka-logger.md)、[UDP Logger](plugins/udp-logger.md)、[RocketMQ Logger](plugins/rocketmq-logger.md)、[SkyWalking Logger](plugins/skywalking-logger.md)、[Alibaba Cloud Logging(SLS)](plugins/sls-logger.md)、[Google Cloud Logging](plugins/google-cloud-logging.md)、[Splunk HEC Logging](plugins/splunk-hec-logging.md)、[File Logger](plugins/file-logger.md)
- [Helm charts](https://github.com/apache/apisix-helm-chart) - [Helm charts](https://github.com/apache/apisix-helm-chart)
- **高度可扩展** - **高度可扩展**
- [自定义插件](plugin-develop.md): 允许挂载常见阶段,例如`init`, `rewrite``access``balancer`,`header filter``body filter` 和 `log` 阶段。 - [自定义插件](plugin-develop.md):允许挂载常见阶段,例如`init``rewrite``access``balancer``header filter``body filter` 和 `log` 阶段。
- [插件可以用 Java/Go/Python 编写](../../zh/latest/external-plugin.md) - [插件可以用 Java/Go/Python 编写](../../zh/latest/external-plugin.md)
- 自定义负载均衡算法:可以在 `balancer` 阶段使用自定义负载均衡算法。 - 自定义负载均衡算法:可以在 `balancer` 阶段使用自定义负载均衡算法。
- 自定义路由: 支持用户自己实现路由算法。 - 自定义路由:支持用户自己实现路由算法。
- **多语言支持** - **多语言支持**
- Apache APISIX 是一个通过 `RPC``Wasm` 支持不同语言来进行插件开发的网关. - Apache APISIX 是一个通过 `RPC``Wasm` 支持不同语言来进行插件开发的网关
![Multi Language Support into Apache APISIX](../../../docs/assets/images/apisix-multi-lang-support.png) ![Multi Language Support into Apache APISIX](../../../docs/assets/images/apisix-multi-lang-support.png)
- RPC 是当前采用的开发方式。开发者可以使用他们需要的语言来进行 RPC 服务的开发,该 RPC 通过本地通讯来跟 APISIX 进行数据交换。到目前为止APISIX 已支持[Java](https://github.com/apache/apisix-java-plugin-runner), [Golang](https://github.com/apache/apisix-go-plugin-runner), [Python](https://github.com/apache/apisix-python-plugin-runner) 和 Node.js。 - RPC 是当前采用的开发方式。开发者可以使用他们需要的语言来进行 RPC 服务的开发,该 RPC 通过本地通讯来跟 APISIX 进行数据交换。到目前为止APISIX 已支持[Java](https://github.com/apache/apisix-java-plugin-runner), [Golang](https://github.com/apache/apisix-go-plugin-runner), [Python](https://github.com/apache/apisix-python-plugin-runner) 和 Node.js。
- Wasm 或 WebAssembly 是实验性的开发方式。 APISIX 能加载运行使用[Proxy Wasm SDK](https://github.com/proxy-wasm/spec#sdks)编译的 Wasm 字节码。开发者仅需要使用该 SDK 编写代码,然后编译成 Wasm 字节码,即可运行在 APISIX 中的 Wasm 虚拟机中。 - Wasm 或 WebAssembly 是实验性的开发方式。 APISIX 能加载运行使用[Proxy Wasm SDK](https://github.com/proxy-wasm/spec#sdks)编译的 Wasm 字节码。开发者仅需要使用该 SDK 编写代码,然后编译成 Wasm 字节码,即可运行在 APISIX 中的 Wasm 虚拟机中。
- **Serverless** - **Serverless**
- [Lua functions](plugins/serverless.md): 能在 APISIX 每个阶段调用 lua 函数. - [Lua functions](plugins/serverless.md):能在 APISIX 每个阶段调用 lua 函数。
- [Azure functions](docs/en/latest/plugins/azure-functions.md): 能无缝整合进 Azure Serverless Function 中。作为动态上游,能将特定的 URI 请求全部代理到微软 Azure 云中。 - [Azure functions](docs/en/latest/plugins/azure-functions.md)能无缝整合进 Azure Serverless Function 中。作为动态上游,能将特定的 URI 请求全部代理到微软 Azure 云中。
- [Apache OpenWhisk](docs/en/latest/plugins/openwhisk.md): 与Apache OpenWhisk集成。作为动态上游,能将特定的 URI 请求代理到你自己的 OpenWhisk 集群。 - [Apache OpenWhisk](docs/en/latest/plugins/openwhisk.md):与 Apache OpenWhisk 集成。作为动态上游,能将特定的 URI 请求代理到你自己的 OpenWhisk 集群。
## 立刻开始 ## 立刻开始
@ -210,7 +210,7 @@ A/B 测试、金丝雀发布(灰度发布)、蓝绿部署、限流限速、抵
## 用户实际使用案例 ## 用户实际使用案例
- [新浪微博: 基于 Apache APISIX新浪微博 API 网关的定制化开发之路](https://apisix.apache.org/blog/2021/07/14/the-road-to-customization-of-Sina-Weibo-API-gateway-based-on-Apache-APISIX) - [新浪微博基于 Apache APISIX新浪微博 API 网关的定制化开发之路](https://apisix.apache.org/blog/2021/07/14/the-road-to-customization-of-Sina-Weibo-API-gateway-based-on-Apache-APISIX)
- [欧盟数字工厂平台: API Security Gateway Using APISIX in the eFactory Platform](https://www.efactory-project.eu/post/api-security-gateway-using-apisix-in-the-efactory-platform) - [欧盟数字工厂平台: API Security Gateway Using APISIX in the eFactory Platform](https://www.efactory-project.eu/post/api-security-gateway-using-apisix-in-the-efactory-platform)
- [贝壳找房:如何基于 Apache APISIX 搭建网关](https://mp.weixin.qq.com/s/yZl9MWPyF1-gOyCp8plflA) - [贝壳找房:如何基于 Apache APISIX 搭建网关](https://mp.weixin.qq.com/s/yZl9MWPyF1-gOyCp8plflA)
- [360Apache APISIX 在基础运维平台项目中的实践](https://mp.weixin.qq.com/s/mF8w8hW4alIMww0MSu9Sjg) - [360Apache APISIX 在基础运维平台项目中的实践](https://mp.weixin.qq.com/s/mF8w8hW4alIMww0MSu9Sjg)

View File

@ -58,7 +58,7 @@ Admin API 是为 Apache APISIX 服务的一组 API我们可以将参数传递
### body 请求参数 ### body 请求参数
| 名字 | 可选项 | 类型 | 说明 | 示例 | | 名字 | 可选项 | 类型 | 说明 | 示例 |
| ---------------- | ---------------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | | ---------------- | ---------------------------------- | -------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| ---------------------------------------------------- |
| uri | 必选,不能与 `uris` 一起使用 | 匹配规则 | 除了如 `/foo/bar`、`/foo/gloo` 这种全量匹配外,使用不同 [Router](architecture-design/router.md) 还允许更高级匹配,更多见 [Router](architecture-design/router.md)。 | "/hello" | | uri | 必选,不能与 `uris` 一起使用 | 匹配规则 | 除了如 `/foo/bar`、`/foo/gloo` 这种全量匹配外,使用不同 [Router](architecture-design/router.md) 还允许更高级匹配,更多见 [Router](architecture-design/router.md)。 | "/hello" |
| uris | 必选,不能与 `uri` 一起使用 | 匹配规则 | 非空数组形式,可以匹配多个 `uri` | ["/hello", "/world"] | | uris | 必选,不能与 `uri` 一起使用 | 匹配规则 | 非空数组形式,可以匹配多个 `uri` | ["/hello", "/world"] |
| plugins | 可选 | Plugin | 详见 [Plugin](architecture-design/plugin.md) | | | plugins | 可选 | Plugin | 详见 [Plugin](architecture-design/plugin.md) | |
@ -71,16 +71,16 @@ Admin API 是为 Apache APISIX 服务的一组 API我们可以将参数传递
| desc | 可选 | 辅助 | 标识描述、使用场景等。 | 路由 xxxx | | desc | 可选 | 辅助 | 标识描述、使用场景等。 | 路由 xxxx |
| host | 可选,不能与 `hosts` 一起使用 | 匹配规则 | 当前请求域名,比如 `foo.com`;也支持泛域名,比如 `*.foo.com`。 | "foo.com" | | host | 可选,不能与 `hosts` 一起使用 | 匹配规则 | 当前请求域名,比如 `foo.com`;也支持泛域名,比如 `*.foo.com`。 | "foo.com" |
| hosts | 可选,不能与 `host` 一起使用 | 匹配规则 | 非空列表形态的 `host`,表示允许有多个不同 `host`,匹配其中任意一个即可。 | ["foo.com", "\*.bar.com"] | | hosts | 可选,不能与 `host` 一起使用 | 匹配规则 | 非空列表形态的 `host`,表示允许有多个不同 `host`,匹配其中任意一个即可。 | ["foo.com", "\*.bar.com"] |
| remote_addr | 可选,不能与 `remote_addrs` 一起使用 | 匹配规则 | 客户端请求 IP 地址: `192.168.1.101`、`192.168.1.102` 以及 CIDR 格式的支持 `192.168.1.0/24`。特别的APISIX 也完整支持 IPv6 地址匹配:`::1``fe80::1`, `fe80::1/64` 等。 | "192.168.1.0/24" | | remote_addr | 可选,不能与 `remote_addrs` 一起使用 | 匹配规则 | 客户端请求 IP 地址`192.168.1.101`、`192.168.1.102` 以及 CIDR 格式的支持 `192.168.1.0/24`。特别的APISIX 也完整支持 IPv6 地址匹配:`::1``fe80::1``fe80::1/64` 等。 | "192.168.1.0/24" |
| remote_addrs | 可选,不能与 `remote_addr` 一起使用 | 匹配规则 | 非空列表形态的 `remote_addr`,表示允许有多个不同 IP 地址,符合其中任意一个即可。 | ["127.0.0.1", "192.0.0.0/8", "::1"] | | remote_addrs | 可选,不能与 `remote_addr` 一起使用 | 匹配规则 | 非空列表形态的 `remote_addr`,表示允许有多个不同 IP 地址,符合其中任意一个即可。 | ["127.0.0.1", "192.0.0.0/8", "::1"] |
| methods | 可选 | 匹配规则 | 如果为空或没有该选项,代表没有任何 `method` 限制,也可以是一个或多个的组合:`GET`, `POST`, `PUT`, `DELETE`, `PATCH`, `HEAD`, `OPTIONS``CONNECT``TRACE`。 | ["GET", "POST"] | | methods | 可选 | 匹配规则 | 如果为空或没有该选项,代表没有任何 `method` 限制,也可以是一个或多个的组合:`GET``POST``PUT``DELETE``PATCH``HEAD``OPTIONS``CONNECT``TRACE`。 | ["GET", "POST"] |
| priority | 可选 | 匹配规则 | 如果不同路由包含相同 `uri`,根据属性 `priority` 确定哪个 `route` 被优先匹配,值越大优先级越高,默认值为 0。 | priority = 10 | | priority | 可选 | 匹配规则 | 如果不同路由包含相同 `uri`,根据属性 `priority` 确定哪个 `route` 被优先匹配,值越大优先级越高,默认值为 0。 | priority = 10 |
| vars | 可选 | 匹配规则 | 由一个或多个`[var, operator, val]`元素组成的列表,类似这样:`[[var, operator, val], [var, operator, val], ...]]`。例如:`["arg_name", "==", "json"]`,表示当前请求参数 `name``json`。这里的 `var` 与 Nginx 内部自身变量命名是保持一致,所以也可以使用 `request_uri`、`host` 等。更多细节请参考[lua-resty-expr](https://github.com/api7/lua-resty-expr) | [["arg_name", "==", "json"], ["arg_age", ">", 18]] | | vars | 可选 | 匹配规则 | 由一个或多个`[var, operator, val]`元素组成的列表,类似这样:`[[var, operator, val], [var, operator, val], ...]]`。例如:`["arg_name", "==", "json"]`,表示当前请求参数 `name``json`。这里的 `var` 与 Nginx 内部自身变量命名是保持一致,所以也可以使用 `request_uri`、`host` 等。更多细节请参考[lua-resty-expr](https://github.com/api7/lua-resty-expr) | [["arg_name", "==", "json"], ["arg_age", ">", 18]] |
| filter_func | 可选 | 匹配规则 | 用户自定义的过滤函数。可以使用它来实现特殊场景的匹配要求实现。该函数默认接受一个名为 vars 的输入参数,可以用它来获取 Nginx 变量。 | function(vars) return vars["arg_name"] == "json" end | | filter_func | 可选 | 匹配规则 | 用户自定义的过滤函数。可以使用它来实现特殊场景的匹配要求实现。该函数默认接受一个名为 vars 的输入参数,可以用它来获取 Nginx 变量。 | function(vars) return vars["arg_name"] == "json" end |
| labels | 可选 | 匹配规则 | 标识附加属性的键值对 | {"version":"v2","build":"16","env":"production"} | | labels | 可选 | 匹配规则 | 标识附加属性的键值对 | {"version":"v2","build":"16","env":"production"} |
| timeout | 可选 | 辅助 | 为 route 设置 upstream 的连接、发送消息、接收消息的超时时间。这个配置将会覆盖在 upstream 中 配置的 [timeout](#upstream) 选项 | {"connect": 3, "send": 3, "read": 3} | | timeout | 可选 | 辅助 | 为 route 设置 upstream 的连接、发送消息、接收消息的超时时间。这个配置将会覆盖在 upstream 中 配置的 [timeout](#upstream) 选项 | {"connect": 3, "send": 3, "read": 3} |
| enable_websocket | 可选 | 辅助 | 是否启用 `websocket`(boolean), 缺省 `false`. | | | enable_websocket | 可选 | 辅助 | 是否启用 `websocket`(boolean), 缺省 `false` | |
| status | 可选 | 辅助 | 是否启用此路由, 缺省 `1` | `1` 表示启用,`0` 表示禁用 | | status | 可选 | 辅助 | 是否启用此路由,缺省 `1` | `1` 表示启用,`0` 表示禁用 |
| create_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 | | create_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
| update_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 | | update_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
@ -566,12 +566,12 @@ APISIX 的 Upstream 除了基本的负载均衡算法选择外,还支持对上
`hash_on` 比较复杂,这里专门说明下: `hash_on` 比较复杂,这里专门说明下:
1. 设为 `vars` 时,`key` 为必传参数,目前支持的 Nginx 内置变量有 `uri, server_name, server_addr, request_uri, remote_port, remote_addr, query_string, host, hostname, arg_***`,其中 `arg_***` 是来自 URL 的请求参数,[Nginx 变量列表](http://nginx.org/en/docs/varindex.html) 1. 设为 `vars` 时,`key` 为必传参数,目前支持的 Nginx 内置变量有 `uri, server_name, server_addr, request_uri, remote_port, remote_addr, query_string, host, hostname, arg_***`,其中 `arg_***` 是来自 URL 的请求参数,[Nginx 变量列表](http://nginx.org/en/docs/varindex.html)
2. 设为 `header`, `key` 为必传参数,其值为自定义的 header name, 即 "http\_`key`" 2. 设为 `header``key` 为必传参数,其值为自定义的 header name即 "http\_`key`"
3. 设为 `cookie`, `key` 为必传参数,其值为自定义的 cookie name即 "cookie\_`key`"。请注意 cookie name 是**区分大小写字母**的。例如:"cookie_x_foo" 与 "cookie_X_Foo" 表示不同的 `cookie` 3. 设为 `cookie``key` 为必传参数,其值为自定义的 cookie name即 "cookie\_`key`"。请注意 cookie name 是**区分大小写字母**的。例如:"cookie_x_foo" 与 "cookie_X_Foo" 表示不同的 `cookie`
4. 设为 `consumer` 时,`key` 不需要设置。此时哈希算法采用的 `key` 为认证通过的 `consumer_name` 4. 设为 `consumer` 时,`key` 不需要设置。此时哈希算法采用的 `key` 为认证通过的 `consumer_name`
5. 如果指定的 `hash_on``key` 获取不到值时,就是用默认值:`remote_addr`。 5. 如果指定的 `hash_on``key` 获取不到值时,就是用默认值:`remote_addr`。
以下特性需要 APISIX 运行于 [APISIX-OpenResty](./how-to-build.md#步骤6为-apache-apisix-构建-openresty) 以下特性需要 APISIX 运行于 [APISIX-OpenResty](./how-to-build.md#步骤-6-为-apache-apisix-构建-openresty)
`scheme` 可以设置成 `tls`,表示 "TLS over TCP"。 `scheme` 可以设置成 `tls`,表示 "TLS over TCP"。
@ -580,7 +580,7 @@ APISIX 的 Upstream 除了基本的负载均衡算法选择外,还支持对上
`keepalive_pool` 允许 upstream 对象有自己单独的连接池。 `keepalive_pool` 允许 upstream 对象有自己单独的连接池。
它下属的字段,比如 `requests`,可以用了配置上游连接保持的参数。 它下属的字段,比如 `requests`,可以用了配置上游连接保持的参数。
这个特性需要 APISIX 运行于 [APISIX-OpenResty](./how-to-build.md#步骤6为-apache-apisix-构建-openresty)。 这个特性需要 APISIX 运行于 [APISIX-OpenResty](./how-to-build.md#步骤-6-为-apache-apisix-构建-openresty)。
**upstream 对象 json 配置内容:** **upstream 对象 json 配置内容:**
@ -732,7 +732,7 @@ $ curl http://127.0.0.1:9080/get
节点可以配置自己的优先级。只有在高优先级的节点不可用或者尝试过,才会访问一个低优先级的节点。 节点可以配置自己的优先级。只有在高优先级的节点不可用或者尝试过,才会访问一个低优先级的节点。
由于默认的优先级是 0我们可以给一些节点配置负数的优先级来作为备份。 由于默认的优先级是 0我们可以给一些节点配置负数的优先级来作为备份。
举个例子: 举个例子
```json ```json
{ {
@ -799,7 +799,7 @@ $ curl http://127.0.0.1:9080/get
| labels | 可选 | 匹配规则 | 标识附加属性的键值对 | {"version":"v2","build":"16","env":"production"} | | labels | 可选 | 匹配规则 | 标识附加属性的键值对 | {"version":"v2","build":"16","env":"production"} |
| create_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 | | create_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
| update_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 | | update_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
| status | 可选 | 辅助 | 是否启用此 SSL, 缺省 `1`。 | `1` 表示启用,`0` 表示禁用 | | status | 可选 | 辅助 | 是否启用此 SSL缺省 `1`。 | `1` 表示启用,`0` 表示禁用 |
ssl 对象 json 配置内容: ssl 对象 json 配置内容:
@ -890,7 +890,7 @@ ssl 对象 json 配置内容:
一个根据插件 ({plugin_name}) 的 `metadata_schema` 定义的数据结构的 json object 。 一个根据插件 ({plugin_name}) 的 `metadata_schema` 定义的数据结构的 json object 。
例子: 例子
```shell ```shell
$ curl http://127.0.0.1:9080/apisix/admin/plugin_metadata/example-plugin -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -i -X PUT -d ' $ curl http://127.0.0.1:9080/apisix/admin/plugin_metadata/example-plugin -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -i -X PUT -d '
@ -923,7 +923,7 @@ Content-Type: text/plain
获取插件  ({plugin_name})  数据结构的  json object  获取插件  ({plugin_name})  数据结构的  json object 
例子: 例子
```shell ```shell
$ curl "http://127.0.0.1:9080/apisix/admin/plugins/list" -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' $ curl "http://127.0.0.1:9080/apisix/admin/plugins/list" -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
@ -957,7 +957,7 @@ $ curl "http://127.0.0.1:9080/apisix/admin/plugins/key-auth" -H 'X-API-KEY:
*API*/apisix/admin/stream_routes/{id} *API*/apisix/admin/stream_routes/{id}
*Description*Stream Route 是用于 TCP/UDP 动态代理的路由。参见 [TCP/UDP 动态代理](./stream-proxy.md) 一节. *Description*Stream Route 是用于 TCP/UDP 动态代理的路由。参见 [TCP/UDP 动态代理](./stream-proxy.md) 一节
### 请求方法 ### 请求方法

View File

@ -23,7 +23,7 @@ title: Debug Mode
### 基本调试模式 ### 基本调试模式
设置 `conf/debug.yaml` 即可开启基本调试模式: 设置 `conf/debug.yaml` 即可开启基本调试模式
``` ```
basic: basic:

View File

@ -27,13 +27,13 @@ APISIX 区别于其他 API 网关的一大特点是允许用户选择不同 Rout
- `apisix.router.http`: HTTP 请求路由。 - `apisix.router.http`: HTTP 请求路由。
- `radixtree_uri`: (默认)只使用 `uri` 作为主索引。基于 `radixtree` 引擎,支持全量和深前缀匹配,更多见 [如何使用 router-radixtree](../../../en/latest/router-radixtree.md)。 - `radixtree_uri`(默认)只使用 `uri` 作为主索引。基于 `radixtree` 引擎,支持全量和深前缀匹配,更多见 [如何使用 router-radixtree](../../../en/latest/router-radixtree.md)。
- `绝对匹配`:完整匹配给定的 `uri` ,比如 `/foo/bar``/foo/glo`。 - `绝对匹配`:完整匹配给定的 `uri` ,比如 `/foo/bar``/foo/glo`。
- `前缀匹配`:末尾使用 `*` 代表给定的 `uri` 是前缀匹配。比如 `/foo*`,则允许匹配 `/foo/`、`/foo/a`和`/foo/b`等。 - `前缀匹配`:末尾使用 `*` 代表给定的 `uri` 是前缀匹配。比如 `/foo*`,则允许匹配 `/foo/`、`/foo/a`和`/foo/b`等。
- `匹配优先级`:优先尝试绝对匹配,若无法命中绝对匹配,再尝试前缀匹配。 - `匹配优先级`:优先尝试绝对匹配,若无法命中绝对匹配,再尝试前缀匹配。
- `任意过滤属性`:允许指定任何 Nginx 内置变量作为过滤条件,比如 URL 请求参数、请求头、cookie 等。 - `任意过滤属性`:允许指定任何 Nginx 内置变量作为过滤条件,比如 URL 请求参数、请求头、cookie 等。
- `radixtree_uri_with_parameter`: 同 `radixtree_uri` 但额外有参数匹配的功能。 - `radixtree_uri_with_parameter`: 同 `radixtree_uri` 但额外有参数匹配的功能。
- `radixtree_host_uri`: 使用 `host + uri` 作为主索引(基于 `radixtree` 引擎),对当前请求会同时匹配 host 和 uri支持的匹配条件与 `radixtree_uri` 基本一致。 - `radixtree_host_uri`使用 `host + uri` 作为主索引(基于 `radixtree` 引擎),对当前请求会同时匹配 host 和 uri支持的匹配条件与 `radixtree_uri` 基本一致。
- `apisix.router.ssl`: SSL 加载匹配路由。 - `apisix.router.ssl`SSL 加载匹配路由。
- `radixtree_sni`: (默认)使用 `SNI` (Server Name Indication) 作为主索引(基于 radixtree 引擎)。 - `radixtree_sni`(默认)使用 `SNI` (Server Name Indication) 作为主索引(基于 radixtree 引擎)。

View File

@ -124,7 +124,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
#### Consumer #### Consumer
创建一个 consumer 对象: 创建一个 consumer 对象
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '

View File

@ -25,7 +25,7 @@ title: 压力测试
使用谷歌云的服务器进行测试,型号为 n1-highcpu-8 (8 vCPUs, 7.2 GB memory) 使用谷歌云的服务器进行测试,型号为 n1-highcpu-8 (8 vCPUs, 7.2 GB memory)
我们最多只使用 4 核去运行 APISIX, 剩下的 4 核用于系统和压力测试工具 [wrk](https://github.com/wg/wrk)。 我们最多只使用 4 核去运行 APISIX剩下的 4 核用于系统和压力测试工具 [wrk](https://github.com/wg/wrk)。
### 测试反向代理 ### 测试反向代理
@ -39,13 +39,13 @@ title: 压力测试
#### 延时 #### 延时
请注意 y 轴延时的单位是**微秒(μs)**,而不是毫秒: 请注意 y 轴延时的单位是**微秒μs**,而不是毫秒:
![latency-1](../../assets/images/latency-1.jpg) ![latency-1](../../assets/images/latency-1.jpg)
#### 火焰图 #### 火焰图
火焰图的采样结果: 火焰图的采样结果
![flamegraph-1](../../assets/images/flamegraph-1.jpg) ![flamegraph-1](../../assets/images/flamegraph-1.jpg)
@ -61,11 +61,11 @@ title: 压力测试
#### Latency #### Latency
请注意 y 轴延时的单位是**微秒(μs)**,而不是毫秒: 请注意 y 轴延时的单位是**微秒μs**,而不是毫秒:
![latency-2](../../assets/images/latency-2.jpg) ![latency-2](../../assets/images/latency-2.jpg)
#### 火焰图 #### 火焰图
火焰图的采样结果: 火焰图的采样结果
![火焰图采样结果](../../assets/images/flamegraph-2.jpg) ![火焰图采样结果](../../assets/images/flamegraph-2.jpg)

View File

@ -23,17 +23,17 @@ title: 证书
`APISIX` 支持通过 TLS 扩展 SNI 实现加载特定的 SSL 证书以实现对 https 的支持。 `APISIX` 支持通过 TLS 扩展 SNI 实现加载特定的 SSL 证书以实现对 https 的支持。
SNI(Server Name Indication)是用来改善 SSL 和 TLS 的一项特性,它允许客户端在服务器端向其发送证书之前向服务器端发送请求的域名,服务器端根据客户端请求的域名选择合适的 SSL 证书发送给客户端。 SNIServer Name Indication是用来改善 SSL 和 TLS 的一项特性,它允许客户端在服务器端向其发送证书之前向服务器端发送请求的域名,服务器端根据客户端请求的域名选择合适的 SSL 证书发送给客户端。
### 单一域名指定 ### 单一域名指定
通常情况下一个 SSL 证书只包含一个静态域名,配置一个 `ssl` 参数对象,它包括 `cert`、`key`和`sni`三个属性,详细如下: 通常情况下一个 SSL 证书只包含一个静态域名,配置一个 `ssl` 参数对象,它包括 `cert`、`key`和`sni`三个属性,详细如下:
* `cert`: SSL 密钥对的公钥pem 格式 * `cert`SSL 密钥对的公钥pem 格式
* `key`: SSL 密钥对的私钥pem 格式 * `key`SSL 密钥对的私钥pem 格式
* `snis`: SSL 证书所指定的一个或多个域名,注意在设置这个参数之前,你需要确保这个证书对应的私钥是有效的。 * `snis`SSL 证书所指定的一个或多个域名,注意在设置这个参数之前,你需要确保这个证书对应的私钥是有效的。
为了简化示例,我们会使用下面的 Python 脚本: 为了简化示例,我们会使用下面的 Python 脚本
```python ```python
#!/usr/bin/env python #!/usr/bin/env python
@ -108,7 +108,7 @@ curl --resolve 'test.com:9443:127.0.0.1' https://test.com:9443/hello -vvv
一个 SSL 证书的域名也可能包含泛域名,如 `*.test.com`,它代表所有以 `test.com` 结尾的域名都可以使用该证书。 一个 SSL 证书的域名也可能包含泛域名,如 `*.test.com`,它代表所有以 `test.com` 结尾的域名都可以使用该证书。
比如 `*.test.com`,可以匹配 `www.test.com`、`mail.test.com`。 比如 `*.test.com`,可以匹配 `www.test.com`、`mail.test.com`。
看下面这个例子,请注意我们把 `*.test.com` 作为 sni 传递进来: 看下面这个例子,请注意我们把 `*.test.com` 作为 sni 传递进来
```shell ```shell
./ssl.py t.crt t.key '*.test.com' ./ssl.py t.crt t.key '*.test.com'

View File

@ -86,7 +86,7 @@ APISIX 中一些插件添加了自己的 control API。如果你对他们感兴
} }
``` ```
只有启用了的插件才会被包含在返回结果中 `plugins` 部分。(返回结果中的)一些插件可能会缺失如 `consumer_schema` 或者 `type` 字段,这取决于插件的定义。 只有启用了的插件才会被包含在返回结果中 `plugins` 部分。(返回结果中的)一些插件可能会缺失如 `consumer_schema` 或者 `type` 字段,这取决于插件的定义。
### GET /v1/healthcheck ### GET /v1/healthcheck

View File

@ -72,7 +72,7 @@ $ curl http://127.0.0.1:9080/hello -v
具有 `X-APISIX-Upstream-Status: 502` 的响应头。 具有 `X-APISIX-Upstream-Status: 502` 的响应头。
示例2: `502` 响应状态码来源于 `APISIX` 示例 2`502` 响应状态码来源于 `APISIX`
```shell ```shell
$ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' $ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '

View File

@ -133,7 +133,7 @@ APISIX 是通过 `upstream.nodes` 来配置上游服务的,所以使用注册
1. 首先要选择状态为 “UP” 的实例: overriddenStatus 值不为 "UNKNOWN" 以 overriddenStatus 为准,否则以 status 的值为准; 1. 首先要选择状态为 “UP” 的实例: overriddenStatus 值不为 "UNKNOWN" 以 overriddenStatus 为准,否则以 status 的值为准;
2. IP 地址:以 ipAddr 的值为 IP; 并且必须是 IPv4 或 IPv6 格式的; 2. IP 地址:以 ipAddr 的值为 IP; 并且必须是 IPv4 或 IPv6 格式的;
3. 端口:端口取值规则是,如果 port["@enabled"] 等于 "true" 那么使用 port["\$"] 的值;如果 securePort["@enabled"] 等于 "true" 那么使用 securePort["$"] 的值; 3. 端口:端口取值规则是,如果 port["@enabled"] 等于 "true" 那么使用 port["\$"] 的值;如果 securePort["@enabled"] 等于 "true" 那么使用 securePort["$"] 的值;
4. 权重:权重取值顺序是,先判断 `metadata.weight` 是否有值,如果没有,则取配置中的 `eureka.weight` 的值, 如果还没有,则取默认值`100` 4. 权重:权重取值顺序是,先判断 `metadata.weight` 是否有值,如果没有,则取配置中的 `eureka.weight` 的值如果还没有,则取默认值`100`
这个例子转成 APISIX nodes 的结果如下: 这个例子转成 APISIX nodes 的结果如下:

View File

@ -23,13 +23,13 @@ title: Kubernetes
## 基于 Kubernetes 的服务发现 ## 基于 Kubernetes 的服务发现
Kubernetes 服务发现模块以 [_List-Watch_](https://kubernetes.io/docs/reference/using-api/api-concepts) 方式监听 [_Kubernetes_](https://kubernetes.io) 集群 [_Endpoints_](https://kubernetes.io/docs/concepts/services-networking/service) 资源的实时变化, Kubernetes 服务发现模块以 [_List-Watch_](https://kubernetes.io/docs/reference/using-api/api-concepts) 方式监听 [_Kubernetes_](https://kubernetes.io) 集群 [_Endpoints_](https://kubernetes.io/docs/concepts/services-networking/service) 资源的实时变化
并将其值存储到 ngx.shared.kubernetes 中 \ 并将其值存储到 ngx.shared.kubernetes 中 \
模块同时遵循 [_APISIX Discovery 规范_](https://github.com/apache/apisix/blob/master/docs/zh/latest/discovery.md) 提供了节点查询接口 模块同时遵循 [_APISIX Discovery 规范_](https://github.com/apache/apisix/blob/master/docs/zh/latest/discovery.md) 提供了节点查询接口
## Kubernetes 服务发现模块的配置 ## Kubernetes 服务发现模块的配置
Kubernetes 服务发现模块的完整配置如下: Kubernetes 服务发现模块的完整配置如下
```yaml ```yaml
discovery: discovery:
@ -77,14 +77,14 @@ discovery:
first="a",second="b" first="a",second="b"
``` ```
如果 Kubernetes 服务发现模块运行在 Pod 内, 你可以使用最简配置: 如果 Kubernetes 服务发现模块运行在 Pod 内,你可以使用最简配置:
```yaml ```yaml
discovery: discovery:
kubernetes: { } kubernetes: { }
``` ```
如果 Kubernetes 服务发现模块运行在 Pod 外, 你需要新建或选取指定的 [_ServiceAccount_](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/), 获取其 Token 值, 然后使用如下配置: 如果 Kubernetes 服务发现模块运行在 Pod 外你需要新建或选取指定的 [_ServiceAccount_](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/), 获取其 Token 值,然后使用如下配置:
```yaml ```yaml
discovery: discovery:
@ -102,20 +102,20 @@ discovery:
Kubernetes 服务发现模块遵循 [_APISIX Discovery 规范_](https://github.com/apache/apisix/blob/master/docs/zh/latest/discovery.md) 提供查询接口 Kubernetes 服务发现模块遵循 [_APISIX Discovery 规范_](https://github.com/apache/apisix/blob/master/docs/zh/latest/discovery.md) 提供查询接口
**函数:** **函数**
nodes(service_name) nodes(service_name)
**说明:** **说明**
service_name 必须满足格式: [namespace]/[name]:[portName] service_name 必须满足格式: [namespace]/[name]:[portName]
+ namespace: Endpoints 所在的命名空间 + namespace: Endpoints 所在的命名空间
+ name: Endpoints 的资源名 + name: Endpoints 的资源名
+ portName: Endpoints 定义包含的 portName, 如果 Endpoints 没有定义 portName, 请使用 targetPort,Port 代替 + portName: Endpoints 定义包含的 portName如果 Endpoints 没有定义 portName请使用 targetPort,Port 代替
**返回值:** **返回值**
以如下 Endpoints 为例: 以如下 Endpoints 为例:
```yaml ```yaml
apiVersion: v1 apiVersion: v1
@ -131,7 +131,7 @@ Kubernetes 服务发现模块遵循 [_APISIX Discovery 规范_](https://github.c
- port: 3306 - port: 3306
``` ```
nodes("default/plat-dev:3306") 调用会得到如下的返回值: nodes("default/plat-dev:3306") 调用会得到如下的返回值
``` ```
{ {
@ -151,20 +151,20 @@ Kubernetes 服务发现模块遵循 [_APISIX Discovery 规范_](https://github.c
## Q&A ## Q&A
> Q: 为什么只支持配置 token 来访问 Kubernetes APIServer \ > Q: 为什么只支持配置 token 来访问 Kubernetes APIServer \
> A: 一般情况下,我们有三种方式可以完成与 Kubernetes APIServer 的认证: > A: 一般情况下,我们有三种方式可以完成与 Kubernetes APIServer 的认证:
> >
>+ mTLS >+ mTLS
>+ token >+ token
>+ basic authentication >+ basic authentication
> >
> 因为 lua-resty-http 目前不支持 mTLS, basic authentication 不被推荐使用,\ > 因为 lua-resty-http 目前不支持 mTLS, basic authentication 不被推荐使用\
> 所以当前只实现了 token 认证方式 > 所以当前只实现了 token 认证方式
--- ---
> Q: APISIX 继承了 Nginx 的多进程模型, 是否意味着每个 APISIX 工作进程都会监听 Kubernetes Endpoints \ > Q: APISIX 继承了 Nginx 的多进程模型是否意味着每个 APISIX 工作进程都会监听 Kubernetes Endpoints \
> A: Kubernetes 服务发现模块只使用特权进程监听 Kubernetes Endpoints, 然后将其值存储\ > A: Kubernetes 服务发现模块只使用特权进程监听 Kubernetes Endpoints然后将其值存储\
> 到 ngx.shared.kubernetes, 工作进程通过查询 ngx.shared.kubernetes 来获取结果 > 到 ngx.shared.kubernetes工作进程通过查询 ngx.shared.kubernetes 来获取结果
--- ---
@ -172,14 +172,14 @@ Kubernetes 服务发现模块遵循 [_APISIX Discovery 规范_](https://github.c
> A: 假定你指定的 ServiceAccount 资源名为 “kubernetes-discovery“, 命名空间为 “apisix”, 请按如下步骤获取其 Token 值 > A: 假定你指定的 ServiceAccount 资源名为 “kubernetes-discovery“, 命名空间为 “apisix”, 请按如下步骤获取其 Token 值
> >
> 1. 获取 _Secret_ 资源名: \ > 1. 获取 _Secret_ 资源名: \
> 执行以下命令, 输出的第一列内容就是目标 _Secret_ 资源名 > 执行以下命令,输出的第一列内容就是目标 _Secret_ 资源名
> >
> ```shell > ```shell
> kubectl -n apisix get secrets | grep kubernetes-discovery > kubectl -n apisix get secrets | grep kubernetes-discovery
> ``` > ```
> >
> 2. 获取 Token 值: \ > 2. 获取 Token 值: \
> 假定你获取到的 _Secret_ 资源名为 "kubernetes-discovery-token-c64cv", 执行以下命令, 输出内容就是目标 Token 值 > 假定你获取到的 _Secret_ 资源名为 "kubernetes-discovery-token-c64cv", 执行以下命令输出内容就是目标 Token 值
> >
> ```shell > ```shell
> kubectl -n apisix get secret kubernetes-discovery-token-c64cv -o jsonpath={.data.token} | base64 -d > kubectl -n apisix get secret kubernetes-discovery-token-c64cv -o jsonpath={.data.token} | base64 -d

View File

@ -32,10 +32,10 @@ title: gRPC 代理
### 创建代理 gRPC 的 Route ### 创建代理 gRPC 的 Route
在指定 Route 中,代理 gRPC 服务接口: 在指定 Route 中,代理 gRPC 服务接口
* 注意:这个 Route 对应的 Upstream 的 `scheme` 必须设置为 `grpc` 或者 `grpcs` * 注意:这个 Route 对应的 Upstream 的 `scheme` 必须设置为 `grpc` 或者 `grpcs`
* 注意: APISIX 使用 TLS 加密的 HTTP/2 暴露 gRPC 服务, 所以需要先 [配置 SSL 证书](certificate.md) * 注意: APISIX 使用 TLS 加密的 HTTP/2 暴露 gRPC 服务所以需要先 [配置 SSL 证书](certificate.md)
* 注意: APISIX 也支持通过纯文本的 HTTP/2 暴露 gRPC 服务,这不需要依赖 SSL通常用于内网环境代理 gRPC 服务 * 注意: APISIX 也支持通过纯文本的 HTTP/2 暴露 gRPC 服务,这不需要依赖 SSL通常用于内网环境代理 gRPC 服务
* 下面例子所代理的 gRPC 服务可供参考:[grpc_server_example](https://github.com/api7/grpc_server_example)。 * 下面例子所代理的 gRPC 服务可供参考:[grpc_server_example](https://github.com/api7/grpc_server_example)。

View File

@ -25,7 +25,7 @@ title: 健康检查
Apache APISIX 的健康检查使用 [lua-resty-healthcheck](https://github.com/Kong/lua-resty-healthcheck) 实现。 Apache APISIX 的健康检查使用 [lua-resty-healthcheck](https://github.com/Kong/lua-resty-healthcheck) 实现。
注意: 注意
* 只有在 `upstream` 被请求时才会开始健康检查,如果 `upstream` 被配置但没有被请求,不会触发启动健康检查。 * 只有在 `upstream` 被请求时才会开始健康检查,如果 `upstream` 被配置但没有被请求,不会触发启动健康检查。
* 如果没有健康的节点,那么请求会继续发送给上游。 * 如果没有健康的节点,那么请求会继续发送给上游。

View File

@ -21,7 +21,7 @@ title: 如何构建 Apache APISIX
# #
--> -->
## 步骤1安装 Apache APISIX ## 步骤 1 安装 Apache APISIX
你可以通过 RPM 仓库、Docker、Helm Chart、源码包、源码包LTS 版本)等多种方式来安装 Apache APISIX。请在以下选项中选择其中一种执行。 你可以通过 RPM 仓库、Docker、Helm Chart、源码包、源码包LTS 版本)等多种方式来安装 Apache APISIX。请在以下选项中选择其中一种执行。
@ -132,7 +132,7 @@ sudo yum install ./apisix/*.rpm
1. 使用 `brew install openldap` 命令将 `openldap` 安装到本地; 1. 使用 `brew install openldap` 命令将 `openldap` 安装到本地;
2. 使用 `brew --prefix openldap` 命令找到本地安装目录; 2. 使用 `brew --prefix openldap` 命令找到本地安装目录;
3. 将路径添加到项目配置文件中(选择两种方法中的一种即可): 3. 将路径添加到项目配置文件中(选择两种方法中的一种即可):
1. 方法一:通过 `luarocks config` 手动设置 `LDAP_DIR` 变量, 比如 `luarocks config variables.LDAP_DIR /opt/homebrew/cellar/openldap/2.6.1` 1. 方法一:通过 `luarocks config` 手动设置 `LDAP_DIR` 变量比如 `luarocks config variables.LDAP_DIR /opt/homebrew/cellar/openldap/2.6.1`
2. 方法二:当然你也可以选择直接更改 luarocks 的默认配置文件,执行 `cat ~/.luarocks/config-5.1.lua` 命令,然后在文件中添加 `openldap` 的安装目录; 2. 方法二:当然你也可以选择直接更改 luarocks 的默认配置文件,执行 `cat ~/.luarocks/config-5.1.lua` 命令,然后在文件中添加 `openldap` 的安装目录;
3. 参考配置文件示例如下: 3. 参考配置文件示例如下:
variables = { variables = {
@ -156,7 +156,7 @@ sudo yum install ./apisix/*.rpm
目前 Apache APISIX 的 LTS 版本为 `2.10.4`,将“[通过源码包安装](#通过源码包安装)”中的 `APISIX_VERSION` 设置成 `2.10.4` ,其他步骤按顺序进行即可。 目前 Apache APISIX 的 LTS 版本为 `2.10.4`,将“[通过源码包安装](#通过源码包安装)”中的 `APISIX_VERSION` 设置成 `2.10.4` ,其他步骤按顺序进行即可。
## 步骤2安装 etcd ## 步骤 2 安装 etcd
如果你只通过 RPM、Docker 或源代码安装了 Apache APISIX而没有安装 etcd则需要这一步。 如果你只通过 RPM、Docker 或源代码安装了 Apache APISIX而没有安装 etcd则需要这一步。
@ -179,7 +179,7 @@ brew install etcd
brew services start etcd brew services start etcd
``` ```
## 步骤3管理 Apache APISIX 服务 ## 步骤 3 管理 Apache APISIX 服务
我们可以在 Apache APISIX 的目录下使用命令初始化依赖、启动服务和停止服务,也可以通过 `apisix help` 命令查看所有命令和对应的功能。 我们可以在 Apache APISIX 的目录下使用命令初始化依赖、启动服务和停止服务,也可以通过 `apisix help` 命令查看所有命令和对应的功能。
@ -237,7 +237,7 @@ apisix stop
apisix help apisix help
``` ```
## 步骤4运行测试案例 ## 步骤 4 运行测试案例
1. 安装 `perl` 的包管理器 `cpanminus` 1. 安装 `perl` 的包管理器 `cpanminus`
@ -299,7 +299,7 @@ prove -Itest-nginx/lib -r t/plugin/openid-connect.t
关于测试用例的更多细节,参见 [测试框架](https://github.com/apache/apisix/blob/master/docs/en/latest/internal/testing-framework.md) 关于测试用例的更多细节,参见 [测试框架](https://github.com/apache/apisix/blob/master/docs/en/latest/internal/testing-framework.md)
## 步骤5修改 Admin API key ## 步骤 5 修改 Admin API key
您需要修改 Admin API 的 key以保护 Apache APISIX。 您需要修改 Admin API 的 key以保护 Apache APISIX。
@ -347,13 +347,13 @@ Content-Type: text/html
{"node":{...},"action":"get"} {"node":{...},"action":"get"}
``` ```
## 步骤6为 Apache APISIX 构建 OpenResty ## 步骤 6 为 Apache APISIX 构建 OpenResty
有些功能需要引入额外的 NGINX 模块到 OpenResty 当中。 有些功能需要引入额外的 NGINX 模块到 OpenResty 当中。
如果您需要这些功能,您可以构建 APISIX OpenResty。 如果您需要这些功能,您可以构建 APISIX OpenResty。
您可以根据 [api7/apisix-build-tools](https://github.com/api7/apisix-build-tools) 里面的代码,配置自己的构建环境,并完成 APISIX OpenResty 的构建。 您可以根据 [api7/apisix-build-tools](https://github.com/api7/apisix-build-tools) 里面的代码,配置自己的构建环境,并完成 APISIX OpenResty 的构建。
## 步骤7为 Apache APISIX 添加 systemd 配置文件 ## 步骤 7 为 Apache APISIX 添加 systemd 配置文件
如果您使用的操作系统是 CentOS 7且在步骤 2 中通过 RPM 包安装 Apache APISIX配置文件已经自动安装到位你可以直接运行以下命令 如果您使用的操作系统是 CentOS 7且在步骤 2 中通过 RPM 包安装 Apache APISIX配置文件已经自动安装到位你可以直接运行以下命令

View File

@ -66,7 +66,7 @@ curl --cacert /data/certs/mtls_ca.crt --key /data/certs/mtls_client.key --cert /
### 如何配置 ### 如何配置
你需要构建 [APISIX-OpenResty](./how-to-build.md#步骤6为-apache-apisix-构建-openresty),并且需要在配置文件中设定 `etcd.tls` 来使 ETCD 的双向认证功能正常工作。 你需要构建 [APISIX-OpenResty](./how-to-build.md#步骤-6-为-apache-apisix-构建-openresty),并且需要在配置文件中设定 `etcd.tls` 来使 ETCD 的双向认证功能正常工作。
```yaml ```yaml
etcd: etcd:
@ -154,7 +154,7 @@ curl --resolve 'mtls.test.com:<APISIX_HTTPS_PORT>:<APISIX_URL>' "https://<APISIX
在配置 upstream 资源时,可以使用参数 `tls.client_cert``tls.client_key` 来配置 APISIX 用于与上游进行通讯时使用的证书。可参考 [Upstream API 文档](./admin-api.md#upstream)。 在配置 upstream 资源时,可以使用参数 `tls.client_cert``tls.client_key` 来配置 APISIX 用于与上游进行通讯时使用的证书。可参考 [Upstream API 文档](./admin-api.md#upstream)。
该功能需要 APISIX 运行在 [APISIX-OpenResty](./how-to-build.md#步骤6为-apache-apisix-构建-openresty) 上。 该功能需要 APISIX 运行在 [APISIX-OpenResty](./how-to-build.md#步骤-6-为-apache-apisix-构建-openresty) 上。
下面是一个与配置 SSL 时相似的 Python 脚本,可为一个已存在的 upstream 资源配置双向认证。如果需要,可修改 API 地址和 API Key。 下面是一个与配置 SSL 时相似的 Python 脚本,可为一个已存在的 upstream 资源配置双向认证。如果需要,可修改 API 地址和 API Key。

View File

@ -42,7 +42,7 @@ Apache APISIX 提供了两种方式来添加新的功能。
│   └── 3rd-party.lua │   └── 3rd-party.lua
``` ```
接着,在 `conf/config.yaml` 文件中添加如下的配置: 接着,在 `conf/config.yaml` 文件中添加如下的配置
```yaml ```yaml
apisix: apisix:
@ -50,11 +50,11 @@ apisix:
extra_lua_path: "/path/to/example/?.lua" extra_lua_path: "/path/to/example/?.lua"
``` ```
现在使用 `require "apisix.plugins.3rd-party"` 会加载你自己的插件, 比如 `require "apisix.plugins.jwt-auth"`会加载 `jwt-auth` 插件. 现在使用 `require "apisix.plugins.3rd-party"` 会加载你自己的插件, 比如 `require "apisix.plugins.jwt-auth"`会加载 `jwt-auth` 插件
可能你会想覆盖一个文件中的函数,你可以在 `conf/config.yaml` 文件中配置 `lua_module_hook` 来使你的 hook 生效。 可能你会想覆盖一个文件中的函数,你可以在 `conf/config.yaml` 文件中配置 `lua_module_hook` 来使你的 hook 生效。
你的配置可以像下面这样: 你的配置可以像下面这样
```yaml ```yaml
apisix: apisix:
@ -350,7 +350,7 @@ end
## 注册公共接口 ## 注册公共接口
插件可以注册暴露给公网的接口。以 jwt-auth 插件为例,这个插件为了让客户端能够签名,注册了 `GET /apisix/plugin/jwt/sign` 这个接口: 插件可以注册暴露给公网的接口。以 jwt-auth 插件为例,这个插件为了让客户端能够签名,注册了 `GET /apisix/plugin/jwt/sign` 这个接口
```lua ```lua
local function gen_token() local function gen_token()

View File

@ -29,15 +29,15 @@ title: api-breaker
由代码逻辑自动按**触发不健康状态**的次数递增运算: 由代码逻辑自动按**触发不健康状态**的次数递增运算:
每当上游服务返回 `unhealthy.http_statuses` 配置中的状态码(比如500),达到 `unhealthy.failures` 次时(比如3 次),认为上游服务处于不健康状态。 每当上游服务返回 `unhealthy.http_statuses` 配置中的状态码比如500达到 `unhealthy.failures` 次时 (比如3 次),认为上游服务处于不健康状态。
第一次触发不健康状态,**熔断 2 秒**。 第一次触发不健康状态,**熔断 2 秒**。
然后2 秒过后重新开始转发请求到上游服务,如果继续返回 `unhealthy.http_statuses` 状态码,记数再次达到 `unhealthy.failures` 次时,**熔断 4 秒**(倍数方式)。 然后2 秒过后重新开始转发请求到上游服务,如果继续返回 `unhealthy.http_statuses` 状态码,记数再次达到 `unhealthy.failures` 次时,**熔断 4 秒**(倍数方式)。
依次类推2, 4, 8, 16, 32, 64, ..., 256, 最大到 300。 300 是 `max_breaker_sec` 的最大值,允许自定义修改。 依次类推2, 4, 8, 16, 32, 64, ..., 256最大到 300。 300 是 `max_breaker_sec` 的最大值,允许自定义修改。
在不健康状态时,当转发请求到上游服务并返回 `healthy.http_statuses` 配置中的状态码(比如200),达到 `healthy.successes` 次时(比如3 次),认为上游服务恢复健康状态。 在不健康状态时,当转发请求到上游服务并返回 `healthy.http_statuses` 配置中的状态码比如200达到 `healthy.successes` 次时 (比如3 次),认为上游服务恢复健康状态。
## 属性 ## 属性

View File

@ -25,7 +25,7 @@ title: authz-casbin
`authz-casbin` 是一个基于 [Lua Casbin](https://github.com/casbin/lua-casbin/) 的访问控制插件,该插件支持基于各种访问控制模型的授权场景。 `authz-casbin` 是一个基于 [Lua Casbin](https://github.com/casbin/lua-casbin/) 的访问控制插件,该插件支持基于各种访问控制模型的授权场景。
有关如何创建鉴权模型和鉴权策略的详细文档, 请参阅 [Casbin](https://casbin.org/docs/en/supported-models)。 有关如何创建鉴权模型和鉴权策略的详细文档请参阅 [Casbin](https://casbin.org/docs/en/supported-models)。
## 属性 ## 属性
@ -167,7 +167,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
## 测试插件 ## 测试插件
首先定义测试鉴权模型: 首先定义测试鉴权模型
```conf ```conf
[request_definition] [request_definition]
@ -186,7 +186,7 @@ e = some(where (p.eft == allow))
m = (g(r.sub, p.sub) || keyMatch(r.sub, p.sub)) && keyMatch(r.obj, p.obj) && keyMatch(r.act, p.act) m = (g(r.sub, p.sub) || keyMatch(r.sub, p.sub)) && keyMatch(r.obj, p.obj) && keyMatch(r.act, p.act)
``` ```
然后添加测试鉴权策略: 然后添加测试鉴权策略
```conf ```conf
p, *, /, GET p, *, /, GET
@ -202,7 +202,7 @@ g, alice, admin
curl -i http://127.0.0.1:9080/ -X GET curl -i http://127.0.0.1:9080/ -X GET
``` ```
未经授权的用户如 `bob` 访问除 `/` 以外的任何其他页面将得到一个 403 错误: 未经授权的用户如 `bob` 访问除 `/` 以外的任何其他页面将得到一个 403 错误
```shell ```shell
curl -i http://127.0.0.1:9080/res -H 'user: bob' -X GET curl -i http://127.0.0.1:9080/res -H 'user: bob' -X GET

View File

@ -28,20 +28,19 @@ title: authz-keycloak
## 属性 ## 属性
| 名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 | | 名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 |
| ----------------------- | ------------- | ------ | ----------- | --------------------------- | ----------------------------------------------------------------------------------------------- | | ----------------------- | ------------- | ------ | ----------- | --------------------------- |----------------------|
| token_endpoint | string | 必须 | | | 接受 OAuth2 兼容 token 的接口,需要支持 `urn:ietf:params:oauth:grant-type:uma-ticket` 授权类型 | | token_endpoint | string | 必须 | | | 接受 OAuth2 兼容 token 的接口,需要支持 `urn:ietf:params:oauth:grant-type:uma-ticket` 授权类型 |
| grant_type | string | 可选 | "urn:ietf:params:oauth:grant-type:uma-ticket" | ["urn:ietf:params:oauth:grant-type:uma-ticket"] | | | grant_type | string | 可选 | "urn:ietf:params:oauth:grant-type:uma-ticket" | ["urn:ietf:params:oauth:grant-type:uma-ticket"] | |
| audience | string | 可选 | | | 客户端应用访问相应的资源服务器时所需提供的身份信息。当 permissions 参数有值时这个参数是必填的。 | | audience | string | 可选 | | | 客户端应用访问相应的资源服务器时所需提供的身份信息。当 permissions 参数有值时这个参数是必填的。 |
| permissions | array[string] | 可选 | | | 描述客户端应用所需访问的资源和权限范围的字符串。格式必须为:`RESOURCE_ID#SCOPE_ID` | | permissions | array[string] | 可选 | | | 描述客户端应用所需访问的资源和权限范围的字符串。格式必须为:`RESOURCE_ID#SCOPE_ID` |
| timeout | integer | 可选 | 3000 | [1000, ...] | 与身份认证服务器的 http 连接的超时时间 | | timeout | integer | 可选 | 3000 | [1000, ...] | 与身份认证服务器的 http 连接的超时时间 |
| access_token_expires_in | integer | 可选 | 300 | [1, ...] | access token 的过期时间(秒) | access_token_expires_in | integer | 可选 | 300 | [1, ...] | access token 的过期时间(秒)|
| access_token_expires_leeway | integer | 可选 | 0 | [0, ...] | access token 提前更新时间(秒,如果设置了此值,允许在该时间段内使用相同的 access token 令牌来解决潜在的网络并发问题)| | access_token_expires_leeway | integer | 可选 | 0 | [0, ...] | access token 提前更新时间(秒,如果设置了此值,允许在该时间段内使用相同的 access token 令牌来解决潜在的网络并发问题)|
| refresh_token_expires_in | integer | 可选 | 3600 | [1, ...] | refresh token 的过期时间(秒) | | refresh_token_expires_in | integer | 可选 | 3600 | [1, ...] | refresh token 的过期时间(秒)|
| refresh_token_expires_leeway| integer | 可选 | 0 | [0, ...] | refresh token 提前更新时间(秒,如果设置了此值,允许在该时间段内使用相同的 refresh token 令牌来解决潜在的网络并发问题)| | refresh_token_expires_leeway| integer | 可选 | 0 | [0, ...] | refresh token 提前更新时间(秒,如果设置了此值,允许在该时间段内使用相同的 refresh token 令牌来解决潜在的网络并发问题)|
| ssl_verify | boolean | 可选 | true | [0, ...] | 验证 SSL 证书与主机名是否匹配 | | ssl_verify | boolean | 可选 | true | [0, ...] | 验证 SSL 证书与主机名是否匹配 |
| policy_enforcement_mode | string | 可选 | "ENFORCING" | ["ENFORCING", "PERMISSIVE"] | | | policy_enforcement_mode | string | 可选 | "ENFORCING" | ["ENFORCING", "PERMISSIVE"] | |
| access_denied_redirect_uri | string | 可选 | | [1, 2048] |未授权的用户不会返回 `"error_description":"not_authorized"`,而是会定重定向至给定的 uri如 "http://127.0.0.1/test" | access_denied_redirect_uri | string | 可选 | | [1, 2048] | 未授权的用户不会返回 `"error_description":"not_authorized"`,而是会定重定向至给定的 uri如 "http://127.0.0.1/test"|
|
### 策略执行模式 ### 策略执行模式
@ -49,7 +48,7 @@ title: authz-keycloak
**Enforcing** **Enforcing**
- (默认)如果资源没有绑定任何访问策略,请求默认会被拒绝。 - 默认模式,如果资源没有绑定任何访问策略,请求默认会被拒绝。
**Permissive** **Permissive**
@ -57,7 +56,7 @@ title: authz-keycloak
## 如何启用 ## 如何启用
创建一个 `route` 对象,并在该 `route` 对象上启用 `authz-keycloak` 插件, `${realm}``Keycloak` 中的 `realm` 名称: 创建一个 `route` 对象,并在该 `route` 对象上启用 `authz-keycloak` 插件`${realm}``Keycloak` 中的 `realm` 名称:
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/routes/5 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/routes/5 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '

View File

@ -69,7 +69,7 @@ curl http://127.0.0.1:9080/apisix/admin/plugin_metadata/batch-requests -H 'X-API
插件会为 `apisix` 创建一个 `/apisix/batch-requests` 的接口来处理你的批量请求。 插件会为 `apisix` 创建一个 `/apisix/batch-requests` 的接口来处理你的批量请求。
### 接口请求参数: ### 接口请求参数
| 参数名 | 类型 | 可选项 | 默认值 | 有效值 | 描述 | | 参数名 | 类型 | 可选项 | 默认值 | 有效值 | 描述 |
| -------- | --------------------------- | ------ | ------ | ------ | -------------------------------- | | -------- | --------------------------- | ------ | ------ | ------ | -------------------------------- |
@ -133,7 +133,7 @@ $ curl http://127.0.0.1:9080/apisix/admin/routes/br -H 'X-API-KEY: edd1c9f034335
}' }'
``` ```
之后,你就可以将要访问的请求信息传到网关的批量请求接口( `/apisix/batch-requests` )了,网关会以 [http pipeline](https://en.wikipedia.org/wiki/HTTP_pipelining) 的方式自动帮你完成请求。 之后,你就可以将要访问的请求信息传到网关的批量请求接口`/apisix/batch-requests`了,网关会以 [http pipeline](https://en.wikipedia.org/wiki/HTTP_pipelining) 的方式自动帮你完成请求。
```shell ```shell
curl --location --request POST 'http://127.0.0.1:9080/apisix/batch-requests' \ curl --location --request POST 'http://127.0.0.1:9080/apisix/batch-requests' \

View File

@ -68,7 +68,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
## 测试插件 ## 测试插件
> 成功: > 成功
```shell ```shell
$ curl -i http://127.0.0.1:9080/hello $ curl -i http://127.0.0.1:9080/hello

View File

@ -28,13 +28,13 @@ title: consumer-restriction
## 属性 ## 属性
| 参数名 | 类型 | 可选项 | 默认值 | 有效值 | 描述 | | 参数名 | 类型 | 可选项 | 默认值 | 有效值 | 描述 |
| --------- | ------------- | ------ | -----------------| --------------------------------| ----------------------------------------------------------| | --------- | ------------- | ------ | -----------------| --------------------------------|-------------------------------------------------------------------------------------------------------------------------------|
| type | string | 可选 | consumer_name | ["consumer_name", "service_id", "route_id"] | 根据不同的对象做相应的限制,支持 `consumer_name`、`service_id`、`route_id`。 | | type | string | 可选 | consumer_name | ["consumer_name", "service_id", "route_id"] | 根据不同的对象做相应的限制支持 `consumer_name`、`service_id`、`route_id`。 |
| whitelist | array[string] | 必选 | | | 与`blacklist`二选一,只能单独启用白名单或黑名单,两个不能一起使用。 | | whitelist | array[string] | 必选 | | | 与`blacklist`二选一,只能单独启用白名单或黑名单,两个不能一起使用。 |
| blacklist | array[string] | 必选 | | | 与`whitelist`二选一,只能单独启用白名单或黑名单,两个不能一起使用。 | | blacklist | array[string] | 必选 | | | 与`whitelist`二选一,只能单独启用白名单或黑名单,两个不能一起使用。 |
| rejected_code | integer | 可选 | 403 | [200,...] | 当请求被拒绝时,返回的 HTTP 状态码。 | | rejected_code | integer | 可选 | 403 | [200,...] | 当请求被拒绝时,返回的 HTTP 状态码。 |
| rejected_msg | String | 可选 | | | 当请求被拒绝时,返回的消息内容。 | | rejected_msg | String | 可选 | | | 当请求被拒绝时,返回的消息内容。 |
| allowed_by_methods | array[object] | 可选 | | | 为用户设置允许的HTTP methods列表 , HTTP methods 可以为 `["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE"]` | | allowed_by_methods | array[object] | 可选 | | | 为用户设置允许的 HTTP methods 列表 , HTTP methods 可以为 `["GET""POST""PUT""DELETE""PATCH""HEAD""OPTIONS""CONNECT""TRACE"]` |
对于 `type` 字段是个枚举类型,它可以是 `consumer_name``service_id` 。分别代表以下含义: 对于 `type` 字段是个枚举类型,它可以是 `consumer_name``service_id` 。分别代表以下含义:
@ -45,7 +45,7 @@ title: consumer-restriction
### 如何限制 `consumer_name` ### 如何限制 `consumer_name`
下面是一个示例,在指定的 route 上开启了 `consumer-restriction` 插件,限制 consumer 访问: 下面是一个示例,在指定的 route 上开启了 `consumer-restriction` 插件,限制 consumer 访问
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d ' curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
@ -92,7 +92,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
**测试插件** **测试插件**
jack1 访问: jack1 访问
```shell ```shell
curl -u jack2019:123456 http://127.0.0.1:9080/index.html -i curl -u jack2019:123456 http://127.0.0.1:9080/index.html -i
@ -100,7 +100,7 @@ HTTP/1.1 200 OK
... ...
``` ```
jack2 访问: jack2 访问
```shell ```shell
curl -u jack2020:123456 http://127.0.0.1:9080/index.html -i curl -u jack2020:123456 http://127.0.0.1:9080/index.html -i

View File

@ -30,9 +30,9 @@ title: csrf
## 属性 ## 属性
| Name | Type | Requirement | Default | Valid | Description | | Name | Type | Requirement | Default | Valid | Description |
| ---------------- | ------- | ----------- | ------- | ----- | ------------------------------------------------------------ | | ---------------- | ------- | ----------- | ------- | ----- |---------------------|
| name | string | optional | `apisix-csrf-token` | | 生成的 Cookie 中的 token 的名字,需要使用这个名字在请求头携带 Cookie 中的内容 | | name | string | optional | `apisix-csrf-token` | | 生成的 Cookie 中的 token 的名字,需要使用这个名字在请求头携带 Cookie 中的内容 |
| expires | number | optional | `7200` | | CSRF Cookie 的过期时间(秒) | | expires | number | optional | `7200` | | CSRF Cookie 的过期时间(秒)|
| key | string | required | | | 加密 token 的秘钥 | | key | string | required | | | 加密 token 的秘钥 |
**注意:当 expires 设置为 0 时插件将忽略检查 Token 是否过期** **注意:当 expires 设置为 0 时插件将忽略检查 Token 是否过期**

View File

@ -27,7 +27,7 @@ title: dubbo-proxy
## 要求 ## 要求
如果你正在使用 `OpenResty`, 你需要编译它来支持 `dubbo`, 参考 [如何编译](../how-to-build.md#步骤6为-apache-apisix-构建-openresty)。 如果你正在使用 `OpenResty`, 你需要编译它来支持 `dubbo`, 参考 [如何编译](../how-to-build.md#步骤-6-为-apache-apisix-构建-openresty)。
## 运行时属性 ## 运行时属性
@ -45,7 +45,7 @@ title: dubbo-proxy
## 如何启用 ## 如何启用
首先,在 `config.yaml` 中启用 `dubbo-proxy` 插件: 首先,在 `config.yaml` 中启用 `dubbo-proxy` 插件
``` ```
# Add this in config.yaml # Add this in config.yaml
@ -56,7 +56,7 @@ plugins:
然后重载 `APISIX` 然后重载 `APISIX`
这里有个例子,在指定的路由中启用 `dubbo-proxy` 插件: 这里有个例子,在指定的路由中启用 `dubbo-proxy` 插件
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/upstreams/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/upstreams/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
@ -135,7 +135,7 @@ $ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335
现在 `dubbo-proxy` 插件就已经被禁用了。 此方法同样适用于其他插件。 现在 `dubbo-proxy` 插件就已经被禁用了。 此方法同样适用于其他插件。
如果你想彻底禁用 `dubbo-proxy` 插件, 如果你想彻底禁用 `dubbo-proxy` 插件,
你需要在 `config.yaml` 中注释掉以下内容: 你需要在 `config.yaml` 中注释掉以下内容
```yaml ```yaml
plugins: plugins:

View File

@ -64,7 +64,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
## 测试插件 ## 测试插件
* 成功: * 成功
```shell ```shell
$ curl -i http://127.0.0.1:9080/hello $ curl -i http://127.0.0.1:9080/hello

View File

@ -42,7 +42,7 @@ title: error-log-logger
| tcp.tls_server_name | string | 可选 | | | TLS 服务名称标记 | | tcp.tls_server_name | string | 可选 | | | TLS 服务名称标记 |
| skywalking.endpoint_addr | string | 可选 | http://127.0.0.1:12900/v3/logs | | Skywalking 的 HTTP endpoint 地址例如http://127.0.0.1:12800 | | skywalking.endpoint_addr | string | 可选 | http://127.0.0.1:12900/v3/logs | | Skywalking 的 HTTP endpoint 地址例如http://127.0.0.1:12800 |
| skywalking.service_name | string | 可选 | APISIX | | skywalking 上报的 service 名称 | | skywalking.service_name | string | 可选 | APISIX | | skywalking 上报的 service 名称 |
| skywalking.service_instance_name | String | 可选 | APISIX Instance Name | | skywalking 上报的 service 实例名, 如果期望直接获取本机主机名则设置为 `$hostname` | | skywalking.service_instance_name | String | 可选 | APISIX Instance Name | | skywalking 上报的 service 实例名如果期望直接获取本机主机名则设置为 `$hostname` |
| clickhouse.endpoint_addr | String | 可选 | http://127.0.0.1:8213 | | clickhouse 的 HTTP endpoint 地址,例如 http://127.0.0.1:8213 | | clickhouse.endpoint_addr | String | 可选 | http://127.0.0.1:8213 | | clickhouse 的 HTTP endpoint 地址,例如 http://127.0.0.1:8213 |
| clickhouse.user | String | 可选 | default | | clickhouse 的用户名 | | clickhouse.user | String | 可选 | default | | clickhouse 的用户名 |
| clickhouse.password | String | 可选 | | | clickhouse 的密码 | | clickhouse.password | String | 可选 | | | clickhouse 的密码 |

View File

@ -55,7 +55,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
## 测试插件 ## 测试插件
> 成功: > 成功
```shell ```shell
$ curl -i http://127.0.0.1:9080/hello $ curl -i http://127.0.0.1:9080/hello

View File

@ -51,7 +51,7 @@ request_headers 属性中转发到 `authorization` 服务中的 Apache APISIX
## 示例 ## 示例
首先, 你需要设置一个认证服务。这里使用的是 Apache APISIX 无服务器插件模拟的示例。 首先你需要设置一个认证服务。这里使用的是 Apache APISIX 无服务器插件模拟的示例。
```shell ```shell
curl -X PUT 'http://127.0.0.1:9080/apisix/admin/routes/auth' \ curl -X PUT 'http://127.0.0.1:9080/apisix/admin/routes/auth' \
@ -81,7 +81,7 @@ curl -X PUT 'http://127.0.0.1:9080/apisix/admin/routes/auth' \
}' }'
``` ```
下一步, 我们创建一个测试路由。 下一步我们创建一个测试路由。
```shell ```shell
curl -X PUT 'http://127.0.0.1:9080/apisix/admin/routes/1' \ curl -X PUT 'http://127.0.0.1:9080/apisix/admin/routes/1' \

View File

@ -39,9 +39,9 @@ title: google-cloud-logging
| auth_config.project_id | 必选 | | 谷歌服务帐号的项目 ID | | auth_config.project_id | 必选 | | 谷歌服务帐号的项目 ID |
| auth_config.token_uri | 可选 | https://oauth2.googleapis.com/token | 请求谷歌服务帐户的令牌的 URI | | auth_config.token_uri | 可选 | https://oauth2.googleapis.com/token | 请求谷歌服务帐户的令牌的 URI |
| auth_config.entries_uri | 可选 | https://logging.googleapis.com/v2/entries:write | 谷歌日志服务写入日志条目的 API | | auth_config.entries_uri | 可选 | https://logging.googleapis.com/v2/entries:write | 谷歌日志服务写入日志条目的 API |
| auth_config.scopes | 可选 | ["https://www.googleapis.com/auth/logging.read","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/logging.admin","https://www.googleapis.com/auth/cloud-platform"] | 谷歌服务账号的访问范围, 参考: [OAuth 2.0 Scopes for Google APIs](https://developers.google.com/identity/protocols/oauth2/scopes#logging) | | auth_config.scopes | 可选 | ["https://www.googleapis.com/auth/logging.read","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/logging.admin","https://www.googleapis.com/auth/cloud-platform"] | 谷歌服务账号的访问范围,参考:[OAuth 2.0 Scopes for Google APIs](https://developers.google.com/identity/protocols/oauth2/scopes#logging) |
| auth_file | 半可选 | | 谷歌服务账号 JSON 文件的路径(必须配置 `auth_config``auth_file` 之一)| | auth_file | 半可选 | | 谷歌服务账号 JSON 文件的路径(必须配置 `auth_config``auth_file` 之一)|
| ssl_verify | 可选 | true | 启用 `SSL` 验证, 配置根据 [OpenResty文档](https://github.com/openresty/lua-nginx-module#tcpsocksslhandshake) 选项| | ssl_verify | 可选 | true | 启用 `SSL` 验证,配置根据 [OpenResty 文档](https://github.com/openresty/lua-nginx-module#tcpsocksslhandshake) 选项 |
| resource | 可选 | {"type": "global"} | 谷歌监控资源,参考: [MonitoredResource](https://cloud.google.com/logging/docs/reference/v2/rest/v2/MonitoredResource) | | resource | 可选 | {"type": "global"} | 谷歌监控资源,参考: [MonitoredResource](https://cloud.google.com/logging/docs/reference/v2/rest/v2/MonitoredResource) |
| log_id | 可选 | apisix.apache.org%2Flogs | 谷歌日志 ID参考 [LogEntry](https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry) | | log_id | 可选 | apisix.apache.org%2Flogs | 谷歌日志 ID参考 [LogEntry](https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry) |

View File

@ -127,7 +127,7 @@ chmod +x ./upload_pb.pb
### 使用 grpc-transcode 插件 ### 使用 grpc-transcode 插件
在指定 route 中,代理 grpc 服务接口: 在指定 route 中,代理 grpc 服务接口
* 注意: 这个 route 对应的 upstream 的属性 `scheme` 必须设置为 `grpc` * 注意: 这个 route 对应的 upstream 的属性 `scheme` 必须设置为 `grpc`
* 代理 grpc 服务例子可参考:[grpc_server_example](https://github.com/api7/grpc_server_example) * 代理 grpc 服务例子可参考:[grpc_server_example](https://github.com/api7/grpc_server_example)
@ -175,7 +175,7 @@ Proxy-Connection: keep-alive
## 使用 grpc-transcode 插件的 pb_option 选项 ## 使用 grpc-transcode 插件的 pb_option 选项
在指定 route 中,代理 grpc 服务接口: 在指定 route 中,代理 grpc 服务接口
### 选项清单 ### 选项清单

View File

@ -25,7 +25,7 @@ title: gzip
`gzip` 插件能动态设置 `Nginx` 的压缩行为。 `gzip` 插件能动态设置 `Nginx` 的压缩行为。
**该插件要求 `APISIX` 运行在 [APISIX-OpenResty](../how-to-build.md#步骤6为-apache-apisix-构建-openresty) 上。** **该插件要求 `APISIX` 运行在 [APISIX-OpenResty](../how-to-build.md#步骤-6-为-apache-apisix-构建-openresty) 上。**
## 属性 ## 属性

View File

@ -37,7 +37,7 @@ title: hmac-auth
| clock_skew | integer | 可选 | 0 | | 签名允许的时间偏移,以秒为单位的计时。比如允许时间偏移 10 秒钟,那么就应设置为 `10`。特别地,`0` 表示不对 `Date` 进行检查。 | | clock_skew | integer | 可选 | 0 | | 签名允许的时间偏移,以秒为单位的计时。比如允许时间偏移 10 秒钟,那么就应设置为 `10`。特别地,`0` 表示不对 `Date` 进行检查。 |
| signed_headers | array[string] | 可选 | | | 限制加入加密计算的 headers ,指定后客户端请求只能在此范围内指定 headers ,此项为空时将把所有客户端请求指定的 headers 加入加密计算。如: ["User-Agent", "Accept-Language", "x-custom-a"] | | signed_headers | array[string] | 可选 | | | 限制加入加密计算的 headers ,指定后客户端请求只能在此范围内指定 headers ,此项为空时将把所有客户端请求指定的 headers 加入加密计算。如: ["User-Agent", "Accept-Language", "x-custom-a"] |
| keep_headers | boolean | 可选 | false | [ true, false ] | 认证成功后的 http 请求中是否需要保留 `X-HMAC-SIGNATURE`、`X-HMAC-ALGORITHM` 和 `X-HMAC-SIGNED-HEADERS` 的请求头。true: 表示保留 http 请求头false: 表示移除 http 请求头。 | | keep_headers | boolean | 可选 | false | [ true, false ] | 认证成功后的 http 请求中是否需要保留 `X-HMAC-SIGNATURE`、`X-HMAC-ALGORITHM` 和 `X-HMAC-SIGNED-HEADERS` 的请求头。true: 表示保留 http 请求头false: 表示移除 http 请求头。 |
| encode_uri_param | boolean | 可选 | true | [ true, false ] | 是否对签名中的 uri 参数进行编码,例如: `params1=hello%2Cworld` 进行了编码,`params2=hello,world` 没有进行编码。true: 表示对签名中的 uri 参数进行编码false: 不对签名中的 uri 参数编码。 | | encode_uri_param | boolean | 可选 | true | [ true, false ] | 是否对签名中的 uri 参数进行编码,例如:`params1=hello%2Cworld` 进行了编码,`params2=hello,world` 没有进行编码。true: 表示对签名中的 uri 参数进行编码false: 不对签名中的 uri 参数编码。 |
| validate_request_body | boolean | 可选 | false | [ true, false ] | 是否对请求 body 做签名校验。| | validate_request_body | boolean | 可选 | false | [ true, false ] | 是否对请求 body 做签名校验。|
| max_req_body | integer | 可选 | 512 * 1024 | | 最大允许的 body 大小。| | max_req_body | integer | 可选 | 512 * 1024 | | 最大允许的 body 大小。|
@ -98,12 +98,12 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
* 将 query 根据&分隔符拆开成若干项,每一项是 key=value 或者只有 key 的形式。 * 将 query 根据&分隔符拆开成若干项,每一项是 key=value 或者只有 key 的形式。
* 根据 uri 参数是否编码,有下面两种情况: * 根据 uri 参数是否编码,有下面两种情况:
* `encode_uri_param` 为 true 时: * `encode_uri_param` 为 true 时:
* 对拆开后的每一项进行编码处理,分以下两种情况: * 对拆开后的每一项进行编码处理,分以下两种情况
* 当该项只有 key 时,转换公式为 url_encode(key) + "=" 的形式。 * 当该项只有 key 时,转换公式为 url_encode(key) + "=" 的形式。
* 当该项是 key=value 的形式时,转换公式为 url_encode(key) + "=" + url_encode(value) 的形式。这里 value 可以是空字符串。 * 当该项是 key=value 的形式时,转换公式为 url_encode(key) + "=" + url_encode(value) 的形式。这里 value 可以是空字符串。
* 将每一项转换后,以 key 按照字典顺序( ASCII 码由小到大)排序,并使用 & 符号连接起来,生成相应的 canonical_query_string 。 * 将每一项转换后,以 key 按照字典顺序( ASCII 码由小到大)排序,并使用 & 符号连接起来,生成相应的 canonical_query_string 。
* `encode_uri_param` 为 false 时: * `encode_uri_param` 为 false 时
* 对拆开后的每一项进行编码处理,分以下两种情况: * 对拆开后的每一项进行编码处理,分以下两种情况
* 当该项只有 key 时,转换公式为 key + "=" 的形式。 * 当该项只有 key 时,转换公式为 key + "=" 的形式。
* 当该项是 key=value 的形式时,转换公式为 key + "=" + value 的形式。这里 value 可以是空字符串。 * 当该项是 key=value 的形式时,转换公式为 key + "=" + value 的形式。这里 value 可以是空字符串。
* 将每一项转换后,以 key 按照字典顺序( ASCII 码由小到大)排序,并使用 & 符号连接起来,生成相应的 canonical_query_string 。 * 将每一项转换后,以 key 按照字典顺序( ASCII 码由小到大)排序,并使用 & 符号连接起来,生成相应的 canonical_query_string 。
@ -185,7 +185,7 @@ X-HMAC-DIGEST: base64(hmac-sha(<body>))
当没有请求 body 时,插件会计算长度为 0 的空字符串的 hmac-sha 值。 当没有请求 body 时,插件会计算长度为 0 的空字符串的 hmac-sha 值。
**注:**当开启 body 校验时,为了计算请求 body 的 `hmac-sha` 值,插件会把 body 加载到内存中,在请求 body 较大的情况下,可能会造成较高的内存消耗。插件提供了 `max_req_body`(默认值 512KB 配置项来配置最大允许的 body 大小body 超过此大小的请求会被拒绝。 **注**当开启 body 校验时,为了计算请求 body 的 `hmac-sha` 值,插件会把 body 加载到内存中,在请求 body 较大的情况下,可能会造成较高的内存消耗。插件提供了 `max_req_body`(默认值 512KB配置项来配置最大允许的 body 大小body 超过此大小的请求会被拒绝。
### 使用生成好的签名进行请求尝试 ### 使用生成好的签名进行请求尝试
@ -239,7 +239,7 @@ Accept-Ranges: bytes
<html lang="cn"> <html lang="cn">
``` ```
**注:** **注**
1. **ACCESS_KEY, SIGNATURE, ALGORITHM, DATE, SIGNED_HEADERS 分别代表对应的变量** 1. **ACCESS_KEY, SIGNATURE, ALGORITHM, DATE, SIGNED_HEADERS 分别代表对应的变量**
2. **SIGNED_HEADERS 为客户端指定的加入加密计算的 headers。若存在多个 headers 需以 ";" 分割:`x-custom-header-a;x-custom-header-b`** 2. **SIGNED_HEADERS 为客户端指定的加入加密计算的 headers。若存在多个 headers 需以 ";" 分割:`x-custom-header-a;x-custom-header-b`**
@ -319,7 +319,7 @@ $ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f
以 HMAC SHA256 为例,介绍一下各种语言的签名生成示例。需要注意各种语言中对签名字符串的换行符的处理方式,这很容易导致出现 `{"message":"Invalid signature"}` 的问题。 以 HMAC SHA256 为例,介绍一下各种语言的签名生成示例。需要注意各种语言中对签名字符串的换行符的处理方式,这很容易导致出现 `{"message":"Invalid signature"}` 的问题。
示例入参说明: 示例入参说明
| Variable | Value | | Variable | Value |
| -------- | -------------------------- | | -------- | -------------------------- |

View File

@ -37,7 +37,7 @@ title: http-logger
| name | string | 可选 | "http logger" | | 标识 logger 的唯一标识符。 | | name | string | 可选 | "http logger" | | 标识 logger 的唯一标识符。 |
| include_req_body | boolean | 可选 | false | [false, true] | 是否包括请求 body。false 表示不包含请求的 body true 表示包含请求的 body 。 | | include_req_body | boolean | 可选 | false | [false, true] | 是否包括请求 body。false 表示不包含请求的 body true 表示包含请求的 body 。 |
| include_resp_body| boolean | 可选 | false | [false, true] | 是否包括响应体。包含响应体,当为`true`。 | | include_resp_body| boolean | 可选 | false | [false, true] | 是否包括响应体。包含响应体,当为`true`。 |
| include_resp_body_expr | array | 可选 | | | 是否采集响体, 基于[lua-resty-expr](https://github.com/api7/lua-resty-expr)。 该选项需要开启 `include_resp_body`| | include_resp_body_expr | array | 可选 | | | 是否采集响体,基于 [lua-resty-expr](https://github.com/api7/lua-resty-expr)。 该选项需要开启 `include_resp_body`|
| concat_method | string | 可选 | "json" | ["json", "new_line"] | 枚举类型: `json`、`new_line`。**json**: 对所有待发日志使用 `json.encode` 编码。**new_line**: 对每一条待发日志单独使用 `json.encode` 编码并使用 "\n" 连接起来。 | | concat_method | string | 可选 | "json" | ["json", "new_line"] | 枚举类型: `json`、`new_line`。**json**: 对所有待发日志使用 `json.encode` 编码。**new_line**: 对每一条待发日志单独使用 `json.encode` 编码并使用 "\n" 连接起来。 |
| ssl_verify | boolean | optional | false | [false, true] | 是否验证证书。 | | ssl_verify | boolean | optional | false | [false, true] | 是否验证证书。 |
@ -67,7 +67,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
## 测试插件 ## 测试插件
> 成功: > 成功
```shell ```shell
$ curl -i http://127.0.0.1:9080/hello $ curl -i http://127.0.0.1:9080/hello

View File

@ -38,7 +38,7 @@ title: ip-restriction
## 如何启用 ## 如何启用
下面是一个示例,在指定的 route 上开启了 `ip-restriction` 插件: 下面是一个示例,在指定的 route 上开启了 `ip-restriction` 插件
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
@ -61,7 +61,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
}' }'
``` ```
当未允许的IP访问时默认返回 `{"message":"Your IP address is not allowed"}`。如果你想使用自定义的 `message`,可以在插件部分进行配置: 当未允许的 IP 访问时,默认返回 `{"message":"Your IP address is not allowed"}`。如果你想使用自定义的 `message`,可以在插件部分进行配置
```json ```json
"plugins": { "plugins": {

View File

@ -138,7 +138,7 @@ curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f1
在这里,插件在 Consumer 配置中提到的 Consumer 用户 `jack` 的 Vault 路径(`<vault.prefix from conf.yaml>/consumer/jack/jwt-auth`)中查找密钥 `secret`,并使用它进行后续的签名和 JWT 验证。如果在该路径中没有找到密钥,该插件将记录一个错误,并且无法执行 JWT 验证。 在这里,插件在 Consumer 配置中提到的 Consumer 用户 `jack` 的 Vault 路径(`<vault.prefix from conf.yaml>/consumer/jack/jwt-auth`)中查找密钥 `secret`,并使用它进行后续的签名和 JWT 验证。如果在该路径中没有找到密钥,该插件将记录一个错误,并且无法执行 JWT 验证。
2. RS256 RSA 密钥对, 包括公钥和私钥都存粗在 Vault 中。 2. RS256 RSA 密钥对包括公钥和私钥都存粗在 Vault 中。
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '

View File

@ -43,9 +43,9 @@ title: kafka-logger
| name | string | 可选 | "kafka logger" | | batch processor 的唯一标识。 | | name | string | 可选 | "kafka logger" | | batch processor 的唯一标识。 |
| meta_format | enum | 可选 | "default" | ["default""origin"] | `default`:获取请求信息以默认的 JSON 编码方式。`origin`:获取请求信息以 HTTP 原始请求方式。[具体示例](#meta_format-参考示例)| | meta_format | enum | 可选 | "default" | ["default""origin"] | `default`:获取请求信息以默认的 JSON 编码方式。`origin`:获取请求信息以 HTTP 原始请求方式。[具体示例](#meta_format-参考示例)|
| include_req_body | boolean | 可选 | false | [false, true] | 是否包括请求 body。false 表示不包含请求的 body true 表示包含请求的 body。注意如果请求 body 没办法完全放在内存中,由于 Nginx 的限制,我们没有办法把它记录下来。| | include_req_body | boolean | 可选 | false | [false, true] | 是否包括请求 body。false 表示不包含请求的 body true 表示包含请求的 body。注意如果请求 body 没办法完全放在内存中,由于 Nginx 的限制,我们没有办法把它记录下来。|
| include_req_body_expr | array | 可选 | | | 当 `include_req_body` 开启时, 基于 [lua-resty-expr](https://github.com/api7/lua-resty-expr) 表达式的结果进行记录。如果该选项存在,只有在表达式为真的时候才会记录请求 body。 | | include_req_body_expr | array | 可选 | | | 当 `include_req_body` 开启时基于 [lua-resty-expr](https://github.com/api7/lua-resty-expr) 表达式的结果进行记录。如果该选项存在,只有在表达式为真的时候才会记录请求 body。 |
| include_resp_body| boolean | 可选 | false | [false, true] | 是否包括响应体。包含响应体,当为`true`。 | | include_resp_body| boolean | 可选 | false | [false, true] | 是否包括响应体。包含响应体,当为`true`。 |
| include_resp_body_expr | array | 可选 | | | 是否采集响体, 基于[lua-resty-expr](https://github.com/api7/lua-resty-expr)。 该选项需要开启 `include_resp_body`| | include_resp_body_expr | array | 可选 | | | 是否采集响体,基于 [lua-resty-expr](https://github.com/api7/lua-resty-expr)。 该选项需要开启 `include_resp_body`|
| cluster_name | integer | 可选 | 1 | [0,...] | kafka 集群的名称。当有两个或多个 kafka 集群时,可以指定不同的名称。只适用于 producer_type 是 async 模式。| | cluster_name | integer | 可选 | 1 | [0,...] | kafka 集群的名称。当有两个或多个 kafka 集群时,可以指定不同的名称。只适用于 producer_type 是 async 模式。|
本插件支持使用批处理器来聚合并批量处理条目(日志/数据)。这样可以避免插件频繁地提交数据,默认设置情况下批处理器会每 `5` 秒钟或队列中的数据达到 `1000` 条时提交数据,如需了解或自定义批处理器相关参数设置,请参考 [Batch-Processor](../batch-processor.md#配置) 配置部分。 本插件支持使用批处理器来聚合并批量处理条目(日志/数据)。这样可以避免插件频繁地提交数据,默认设置情况下批处理器会每 `5` 秒钟或队列中的数据达到 `1000` 条时提交数据,如需了解或自定义批处理器相关参数设置,请参考 [Batch-Processor](../batch-processor.md#配置) 配置部分。

View File

@ -40,7 +40,7 @@ router 端配置:
| 名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 | | 名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 |
| ---- | ------ | ------ | ------ | ------ | ------------------------------------------------------------------------------------------------------------- | | ---- | ------ | ------ | ------ | ------ | ------------------------------------------------------------------------------------------------------------- |
| header | string | 可选 | apikey | | 设置我们从哪个 header 获取 key。 | | header | string | 可选 | apikey | | 设置我们从哪个 header 获取 key。 |
| query | string | 可选 | apikey | | 设置我们从哪个 query string 获取 key优先级低于 `header` | | query | string | 可选 | apikey | | 设置我们从哪个 querystring 获取 key优先级低于 header |
## 如何启用 ## 如何启用
@ -96,7 +96,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
## 测试插件 ## 测试插件
下面是一个正常通过 `key-auth` 验证的请求: 下面是一个正常通过 `key-auth` 验证的请求
```shell ```shell
$ curl http://127.0.0.2:9080/index.html -H 'apikey: auth-one' -i $ curl http://127.0.0.2:9080/index.html -H 'apikey: auth-one' -i

View File

@ -28,10 +28,10 @@ title: limit-conn
## 属性 ## 属性
| 名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 | | 名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 |
| ------------------ | ------- | -------- | ------ | ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ------------------ | ------- | -------- | ------ | ----------------------------------------------------------------------------------------- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| conn | integer | required | | conn > 0 | 允许的最大并发请求数。超过 `conn` 的限制、但是低于 `conn` + `burst` 的请求,将被延迟处理。 | | conn | integer | required | | conn > 0 | 允许的最大并发请求数。超过 `conn` 的限制、但是低于 `conn` + `burst` 的请求,将被延迟处理。 |
| burst | integer | required | | burst >= 0 | 允许被延迟处理的并发请求数。 | | burst | integer | required | | burst >= 0 | 允许被延迟处理的并发请求数。 |
| default_conn_delay | number | required | | default_conn_delay > 0 | 默认的典型连接(或请求)的处理延迟时间。 | | default_conn_delay | number | required | | default_conn_delay > 0 | 默认的典型连接(或请求)的处理延迟时间。 |
| only_use_default_delay | boolean | optional | false | [true,false] | 延迟时间的严格模式。 如果设置为`true`的话,将会严格按照设置的时间来进行延迟 | | only_use_default_delay | boolean | optional | false | [true,false] | 延迟时间的严格模式。 如果设置为`true`的话,将会严格按照设置的时间来进行延迟 |
| key_type | string | 可选 | "var" | ["var", "var_combination"] | key 的类型 | | key_type | string | 可选 | "var" | ["var", "var_combination"] | key 的类型 |
| key | string | 必须 | | | 用来做请求计数的依据。如果 `key_type` 为 "var",那么 key 会被当作变量名称,如 "remote_addr" 和 "consumer_name"。如果 `key_type` 为 "var_combination",那么 key 会当作变量组合,如 "$remote_addr $consumer_name"。如果 key 的值为空,$remote_addr 会被作为默认 key。 | | key | string | 必须 | | | 用来做请求计数的依据。如果 `key_type` 为 "var",那么 key 会被当作变量名称,如 "remote_addr" 和 "consumer_name"。如果 `key_type` 为 "var_combination",那么 key 会当作变量组合,如 "$remote_addr $consumer_name"。如果 key 的值为空,$remote_addr 会被作为默认 key。 |

View File

@ -211,7 +211,7 @@ curl -i http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335
}' }'
``` ```
如果使用 `redis-cluster` 策略: 如果使用 `redis-cluster` 策略
```shell ```shell
curl -i http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl -i http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '

View File

@ -34,7 +34,7 @@ title: limit-req
| key | string | 必须 | | ["remote_addr", "server_addr", "http_x_real_ip", "http_x_forwarded_for", "consumer_name"] | 用来做请求计数的依据,当前接受的 key 有:"remote_addr"(客户端 IP 地址), "server_addr"(服务端 IP 地址), 请求头中的"X-Forwarded-For" 或 "X-Real-IP""consumer_name"(consumer 的 username)。 | | key | string | 必须 | | ["remote_addr", "server_addr", "http_x_real_ip", "http_x_forwarded_for", "consumer_name"] | 用来做请求计数的依据,当前接受的 key 有:"remote_addr"(客户端 IP 地址), "server_addr"(服务端 IP 地址), 请求头中的"X-Forwarded-For" 或 "X-Real-IP""consumer_name"(consumer 的 username)。 |
| rejected_code | integer | 可选 | 503 | [200,...,599] | 当请求超过阈值被拒绝时,返回的 HTTP 状态码。 | | rejected_code | integer | 可选 | 503 | [200,...,599] | 当请求超过阈值被拒绝时,返回的 HTTP 状态码。 |
| rejected_msg | string | 可选 | | 非空 | 当请求超过阈值被拒绝时,返回的响应体。 | | rejected_msg | string | 可选 | | 非空 | 当请求超过阈值被拒绝时,返回的响应体。 |
| nodelay | boolean | 可选 | false | | 如果 nodelay 为 true 请求速率超过 `rate` 但没有超过 `rate` + `burst`)的请求不会加上延迟, 如果是 false则会加上延迟。 | | nodelay | boolean | 可选 | false | | 如果 nodelay 为 true 请求速率超过 `rate` 但没有超过(`rate` + `burst`)的请求不会加上延迟如果是 false则会加上延迟。 |
| allow_degradation | boolean | 可选 | false | | 当限速插件功能临时不可用时是否允许请求继续。当值设置为 true 时则自动允许请求继续,默认值是 false。| | allow_degradation | boolean | 可选 | false | | 当限速插件功能临时不可用时是否允许请求继续。当值设置为 true 时则自动允许请求继续,默认值是 false。|
## 示例 ## 示例

View File

@ -57,7 +57,7 @@ title: mqtt-proxy
然后把 MQTT 请求发送到 9100 端口即可。 然后把 MQTT 请求发送到 9100 端口即可。
下面是一个示例,在指定的 route 上开启了 `mqtt-proxy` 插件: 下面是一个示例,在指定的 route 上开启了 `mqtt-proxy` 插件
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/stream_routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/stream_routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
@ -81,7 +81,7 @@ curl http://127.0.0.1:9080/apisix/admin/stream_routes/1 -H 'X-API-KEY: edd1c9f03
在 Docker 与 MacOS 结合使用的情况下,`host.docker.internal` 是 `host` 的正确参数。 在 Docker 与 MacOS 结合使用的情况下,`host.docker.internal` 是 `host` 的正确参数。
这个插件暴露了一个变量 `mqtt_client_id`,我们可以用它来通过客户端 ID 进行负载均衡。比如说: 这个插件暴露了一个变量 `mqtt_client_id`,我们可以用它来通过客户端 ID 进行负载均衡。比如说
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/stream_routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/stream_routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '

View File

@ -84,7 +84,7 @@ Server: APISIX web server
| waiting | 当前等待客户端请求的空闲连接数 | | waiting | 当前等待客户端请求的空闲连接数 |
| accepted | 已经接受的客户端连接总数 | | accepted | 已经接受的客户端连接总数 |
| writing | 当前正在写给客户端响应的连接数 | | writing | 当前正在写给客户端响应的连接数 |
| handled | 已经处理的连接总数,通常等于 accepted | | handled | 已经处理的连接总数通常等于 accepted |
| active | 当前活跃的客户端连接数 | | active | 当前活跃的客户端连接数 |
| reading | 当前正在读取请求头的连接数 | | reading | 当前正在读取请求头的连接数 |
| id | APISIX uid 信息,保存在 apisix/conf/apisix.uid | | id | APISIX uid 信息,保存在 apisix/conf/apisix.uid |

View File

@ -93,7 +93,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/5 -H 'X-API-KEY: edd1c9f034335f13
curl -i -X GET http://127.0.0.1:9080/get -H "Host: httpbin.org" -H "Authorization: Bearer {replace_jwt_token}" curl -i -X GET http://127.0.0.1:9080/get -H "Host: httpbin.org" -H "Authorization: Bearer {replace_jwt_token}"
``` ```
当 Oauth 2 授权服务器返回结果里面除了 token 之外还有过期时间, token 将在 APISIX 中缓存直至过期。 当 Oauth 2 授权服务器返回结果里面除了 token 之外还有过期时间token 将在 APISIX 中缓存直至过期。
具体细节参见: 具体细节参见:
1. [lua-resty-openidc](https://github.com/zmartzone/lua-resty-openidc) 的文档和代码。 1. [lua-resty-openidc](https://github.com/zmartzone/lua-resty-openidc) 的文档和代码。

View File

@ -55,7 +55,7 @@ plugins:
然后重载 APISIX。 然后重载 APISIX。
下面是一个示例,在指定的 route 上开启了 opentelemetry 插件: 下面是一个示例,在指定的 route 上开启了 opentelemetry 插件
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
@ -99,7 +99,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f1
| batch_span_processor.max_export_batch_size | integer | 256 | 一批 span 的数量,每次上报的 span 数量 | | batch_span_processor.max_export_batch_size | integer | 256 | 一批 span 的数量,每次上报的 span 数量 |
| batch_span_processor.inactive_timeout | number | 2 | 每隔多长时间检查是否有一批 span 可以上报,单位秒 | | batch_span_processor.inactive_timeout | number | 2 | 每隔多长时间检查是否有一批 span 可以上报,单位秒 |
配置示例: 配置示例
```yaml ```yaml
plugin_attr: plugin_attr:

View File

@ -63,7 +63,7 @@ plugin_attr:
`prometheus` 插件可以使用空 {} 开启。 `prometheus` 插件可以使用空 {} 开启。
注意,多个路由/服务可以设置为相同的名称,因此当设置 `prefer_name``true` 时,注意规范命名否则容易引起误解。 注意,多个路由/服务可以设置为相同的名称,因此当设置 `prefer_name``true` 时,注意规范命名否则容易引起误解。
例子如下: 例子如下
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
@ -99,20 +99,20 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
curl -i http://127.0.0.1:9091/apisix/prometheus/metrics curl -i http://127.0.0.1:9091/apisix/prometheus/metrics
``` ```
把该 uri 地址配置到 prometheus 中去,就会自动完成指标数据提取. 把该 uri 地址配置到 prometheus 中去,就会自动完成指标数据提取。
例子如下: 例子如下
```yaml ```yaml
scrape_configs: scrape_configs:
- job_name: "apisix" - job_name: "apisix"
scrape_interval: 15s # 这个值会跟Prometheus QL中rate函数的时间范围有关系, rate函数中的时间范围应该至少两倍于该值. scrape_interval: 15s # 这个值会跟 Prometheus QL 中 rate 函数的时间范围有关系rate 函数中的时间范围应该至少两倍于该值。
metrics_path: "/apisix/prometheus/metrics" metrics_path: "/apisix/prometheus/metrics"
static_configs: static_configs:
- targets: ["127.0.0.1:9091"] - targets: ["127.0.0.1:9091"]
``` ```
我们也可以在 prometheus 控制台中去检查状态: 我们也可以在 prometheus 控制台中去检查状态
![checking status on prometheus dashboard](../../../assets/images/plugin/prometheus01.png) ![checking status on prometheus dashboard](../../../assets/images/plugin/prometheus01.png)
@ -126,7 +126,7 @@ scrape_configs:
| ---------- | ------ | ---------------------------- | -------------- | | ---------- | ------ | ---------------------------- | -------------- |
| export_uri | string | "/apisix/prometheus/metrics" | 暴露指标的 uri | | export_uri | string | "/apisix/prometheus/metrics" | 暴露指标的 uri |
配置示例: 配置示例
```yaml ```yaml
plugin_attr: plugin_attr:
@ -140,7 +140,7 @@ plugin_attr:
下载 [Grafana dashboard 元数据](https://github.com/apache/apisix/blob/master/docs/assets/other/json/apisix-grafana-dashboard.json) 并导入到 Grafana 中。 下载 [Grafana dashboard 元数据](https://github.com/apache/apisix/blob/master/docs/assets/other/json/apisix-grafana-dashboard.json) 并导入到 Grafana 中。
你可以到 [Grafana 官方](https://grafana.com/grafana/dashboards/11719) 下载 `Grafana` 元数据. 你可以到 [Grafana 官方](https://grafana.com/grafana/dashboards/11719) 下载 `Grafana` 元数据
![Grafana chart-1](../../../assets/images/plugin/grafana-1.png) ![Grafana chart-1](../../../assets/images/plugin/grafana-1.png)
@ -176,7 +176,7 @@ plugin_attr:
* `etcd reachability`: APISIX 连接 etcd 的可用性,用 0 和 1 来表示,`1` 表示可用,`0` 表示不可用。 * `etcd reachability`: APISIX 连接 etcd 的可用性,用 0 和 1 来表示,`1` 表示可用,`0` 表示不可用。
* `Connections`: 各种的 Nginx 连接指标,如 active正处理的活动连接数readingnginx 读取到客户端的 Header 信息数writingnginx 返回给客户端的 Header 信息数),已建立的连接数。 * `Connections`: 各种的 Nginx 连接指标,如 active正处理的活动连接数readingnginx 读取到客户端的 Header 信息数writingnginx 返回给客户端的 Header 信息数),已建立的连接数。
* `Batch process entries`: 批处理未发送数据计数器当你使用了批处理发送插件比如sys logger, http logger, sls logger, tcp logger, udp logger and zipkin, 那么你将会在此指标中看到批处理当前尚未发送的数据的数量。 * `Batch process entries`: 批处理未发送数据计数器当你使用了批处理发送插件比如sys logger, http logger, sls logger, tcp logger, udp logger and zipkin那么你将会在此指标中看到批处理当前尚未发送的数据的数量。
* `Latency`: 每个服务的请求用时和 APISIX 处理耗时的直方图。具有的维度: * `Latency`: 每个服务的请求用时和 APISIX 处理耗时的直方图。具有的维度:
| 名称 | 描述 | | 名称 | 描述 |
@ -188,7 +188,7 @@ plugin_attr:
* `Info`: 当前 APISIX 节点信息。 * `Info`: 当前 APISIX 节点信息。
这里是 APISIX 的原始的指标数据集: 这里是 APISIX 的原始的指标数据集
```shell ```shell
$ curl http://127.0.0.1:9091/apisix/prometheus/metrics $ curl http://127.0.0.1:9091/apisix/prometheus/metrics

View File

@ -47,7 +47,7 @@ title: proxy-cache
注:变量以$开头,也可以使用变量和字符串的结合,但是需要以数组的形式分开写,最终变量被解析后会和字符串拼接在一起。 注:变量以$开头,也可以使用变量和字符串的结合,但是需要以数组的形式分开写,最终变量被解析后会和字符串拼接在一起。
`conf/config.yaml` 文件中的配置示例: `conf/config.yaml` 文件中的配置示例
```yaml ```yaml
proxy_cache: # 代理缓存配置 proxy_cache: # 代理缓存配置
@ -129,7 +129,7 @@ hello
示例二:自定义 cache_zone 参数为 `disk_cache_two` 示例二:自定义 cache_zone 参数为 `disk_cache_two`
1、在 `conf/config.yaml` 文件中的指定缓存区域等信息: 1、在 `conf/config.yaml` 文件中的指定缓存区域等信息
```yaml ```yaml
proxy_cache: proxy_cache:

View File

@ -25,7 +25,7 @@ title: proxy-control
`proxy-control` 能够动态地控制 Nginx 代理的行为。 `proxy-control` 能够动态地控制 Nginx 代理的行为。
**这个插件需要APISIX在 [APISIX-OpenResty](../how-to-build.md#步骤6为-apache-apisix-构建-openresty)上运行。** **这个插件需要 APISIX 在 [APISIX-OpenResty](../how-to-build.md#步骤-6-为-apache-apisix-构建-openresty) 上运行。**
## 属性 ## 属性

View File

@ -32,13 +32,13 @@ proxy-rewrite 是上游代理信息重写插件,支持对 `scheme`、`uri`、`
| scheme | string | 可选 | "http" | ["http", "https"] | 不推荐使用。应该在 Upstream 的 scheme 字段设置上游的 scheme。 | scheme | string | 可选 | "http" | ["http", "https"] | 不推荐使用。应该在 Upstream 的 scheme 字段设置上游的 scheme。
| uri | string | 可选 | | | 转发到上游的新 `uri` 地址。 | | uri | string | 可选 | | | 转发到上游的新 `uri` 地址。 |
| method | string | 可选 | | ["GET", "POST", "PUT", "HEAD", "DELETE", "OPTIONS","MKCOL", "COPY", "MOVE", "PROPFIND", "PROPFIND","LOCK", "UNLOCK", "PATCH", "TRACE"] | 将 route 的请求方法代理为该请求方法。 | | method | string | 可选 | | ["GET", "POST", "PUT", "HEAD", "DELETE", "OPTIONS","MKCOL", "COPY", "MOVE", "PROPFIND", "PROPFIND","LOCK", "UNLOCK", "PATCH", "TRACE"] | 将 route 的请求方法代理为该请求方法。 |
| regex_uri | array[string] | 可选 | | | 转发到上游的新 `uri` 地址, 使用正则表达式匹配来自客户端的uri当匹配成功后使用模板替换转发到上游的uri, 未匹配成功时将客户端请求的uri转发至上游。当 `uri``regex_uri` 同时存在时,`uri` 优先被使用。例如:["^/iresty/(.*)/(.*)/(.*)","/$1-$2-$3"] 第一个元素代表匹配来自客户端请求的uri正则表达式第二个元素代表匹配成功后转发到上游的uri模板。 | | regex_uri | array[string] | 可选 | | | 转发到上游的新 `uri` 地址,使用正则表达式匹配来自客户端的 uri当匹配成功后使用模板替换转发到上游的 uri未匹配成功时将客户端请求的 uri 转发至上游。当 `uri``regex_uri` 同时存在时,`uri` 优先被使用。例如:["^/iresty/(.*)/(.*)/(.*)","/$1-$2-$3"] 第一个元素代表匹配来自客户端请求的 uri 正则表达式,第二个元素代表匹配成功后转发到上游的 uri 模板。 |
| host | string | 可选 | | | 转发到上游的新 `host` 地址,例如:`iresty.com` 。 | | host | string | 可选 | | | 转发到上游的新 `host` 地址,例如:`iresty.com` 。 |
| headers | object | 可选 | | | 转发到上游的新 `headers`,可以设置多个。头信息如果存在将重写,不存在则添加。想要删除某个 header 的话,把对应的值设置为空字符串即可。支持使用 Nginx 的变量,需要以 `$` 开头,如 `client_addr: $remote_addr` :表示请求头 `client_addr` 为客户端 IP。 | | headers | object | 可选 | | | 转发到上游的新 `headers`,可以设置多个。头信息如果存在将重写,不存在则添加。想要删除某个 header 的话,把对应的值设置为空字符串即可。支持使用 Nginx 的变量,需要以 `$` 开头,如 `client_addr: $remote_addr` :表示请求头 `client_addr` 为客户端 IP。 |
## 如何启用 ## 如何启用
下面是一个示例,在指定的 route 上开启了 `proxy-rewrite` 插件: 下面是一个示例,在指定的 route 上开启了 `proxy-rewrite` 插件
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '

View File

@ -27,7 +27,7 @@ title: real-ip
它工作方式和 `Nginx``ngx_http_realip_module` 模块一样,并且更为灵活。 它工作方式和 `Nginx``ngx_http_realip_module` 模块一样,并且更为灵活。
**该插件要求 `APISIX` 运行在 [APISIX-OpenResty](../how-to-build.md#步骤6为-apache-apisix-构建-openresty) 上。** **该插件要求 `APISIX` 运行在 [APISIX-OpenResty](../how-to-build.md#步骤-6-为-apache-apisix-构建-openresty) 上。**
## 属性 ## 属性

View File

@ -31,10 +31,10 @@ URI 重定向插件。
| ------------- | ------- | ----------- | ------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ------------- | ------- | ----------- | ------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| http_to_https | boolean | 可选 | false | | 当设置为 `true` 并且请求是 http 时,会自动 301 重定向为 httpsuri 保持不变 | | http_to_https | boolean | 可选 | false | | 当设置为 `true` 并且请求是 http 时,会自动 301 重定向为 httpsuri 保持不变 |
| uri | string | 可选 | | | 可以包含 Nginx 变量的 URI例如`/test/index.html`, `$uri/index.html`。你可以通过类似于 `$ {xxx}` 的方式引用变量,以避免产生歧义,例如:`${uri}foo/index.html`。若你需要保留 `$` 字符,那么使用如下格式:`/\$foo/index.html` | | uri | string | 可选 | | | 可以包含 Nginx 变量的 URI例如`/test/index.html`, `$uri/index.html`。你可以通过类似于 `$ {xxx}` 的方式引用变量,以避免产生歧义,例如:`${uri}foo/index.html`。若你需要保留 `$` 字符,那么使用如下格式:`/\$foo/index.html` |
| regex_uri | array[string] | 可选 | | | 转发到上游的新 `uri` 地址, 使用正则表达式匹配来自客户端的 `uri`,当匹配成功后使用模板替换发送重定向到客户端, 未匹配成功时将客户端请求的 `uri` 转发至上游。`uri` 和 `regex_uri` 不可以同时存在。例如:["^/iresty/(.*)/(.*)/(.*)","/$1-$2-$3"] 第一个元素代表匹配来自客户端请求的 `uri` 正则表达式,第二个元素代表匹配成功后发送重定向到客户端的 `uri` 模板。 | | regex_uri | array[string] | 可选 | | | 转发到上游的新 `uri` 地址使用正则表达式匹配来自客户端的 `uri`,当匹配成功后使用模板替换发送重定向到客户端未匹配成功时将客户端请求的 `uri` 转发至上游。`uri` 和 `regex_uri` 不可以同时存在。例如:["^/iresty/(.*)/(.*)/(.*)","/$1-$2-$3"] 第一个元素代表匹配来自客户端请求的 `uri` 正则表达式,第二个元素代表匹配成功后发送重定向到客户端的 `uri` 模板。 |
| ret_code | integer | 可选 | 302 | [200, ...] | 请求响应码 | | ret_code | integer | 可选 | 302 | [200, ...] | 请求响应码 |
| encode_uri | boolean | 可选 | false | | 当设置为 `true` 时,对返回的 `Location` header 进行编码,编码格式参考 [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986) | | encode_uri | boolean | 可选 | false | | 当设置为 `true` 时,对返回的 `Location` header 进行编码,编码格式参考 [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986) |
| append_query_string | boolean | optional | false | | 当设置为 `true`将请求url的query部分添加到Location里。如果在 `uri``regex_uri` 中配置了query, 那么请求的query会被追加在这个query后,以 `&` 分隔。 注意如果已经处理了query比如使用了nginx变量 `$request_uri`那么启用此功能会造成query重复 | | append_query_string | boolean | optional | false | | 当设置为 `true` 时,将请求 url query 部分添加到 Location 里。如果在 `uri``regex_uri` 中配置了 query那么请求的 query 会被追加在这个 query 后,以 `&` 分隔。 注意:如果已经处理了 query比如使用了 nginx 变量 `$request_uri`,那么启用此功能会造成 query 重复 |
`http_to_https``uri` 或 `regex_uri` 三个中只能配置一个。 `http_to_https``uri` 或 `regex_uri` 三个中只能配置一个。

View File

@ -39,7 +39,7 @@ title: referer-restriction
## 如何启用 ## 如何启用
下面是一个示例,在指定的 route 上开启了 `referer-restriction` 插件: 下面是一个示例,在指定的 route 上开启了 `referer-restriction` 插件
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
@ -65,7 +65,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
## 测试插件 ## 测试插件
`Referer: http://xx.com/x` 请求: `Referer: http://xx.com/x` 请求
```shell ```shell
$ curl http://127.0.0.1:9080/index.html -H 'Referer: http://xx.com/x' $ curl http://127.0.0.1:9080/index.html -H 'Referer: http://xx.com/x'
@ -73,7 +73,7 @@ HTTP/1.1 200 OK
... ...
``` ```
`Referer: http://yy.com/x` 请求: `Referer: http://yy.com/x` 请求
```shell ```shell
$ curl http://127.0.0.1:9080/index.html -H 'Referer: http://yy.com/x' $ curl http://127.0.0.1:9080/index.html -H 'Referer: http://yy.com/x'
@ -82,7 +82,7 @@ HTTP/1.1 403 Forbidden
{"message":"Your referer host is not allowed"} {"message":"Your referer host is not allowed"}
``` ```
不带 `Referer` 请求: 不带 `Referer` 请求
```shell ```shell
$ curl http://127.0.0.1:9080/index.html $ curl http://127.0.0.1:9080/index.html

View File

@ -29,7 +29,7 @@ title: request-validation
## 属性 ## 属性
> 注意, `header_schema``body_schema` 至少填写其中一个 > 注意`header_schema``body_schema` 至少填写其中一个
| Name | Type | Requirement | Default | Valid | Description | | Name | Type | Requirement | Default | Valid | Description |
| ---------------- | ------ | ----------- | ------- | ----- | --------------------------------- | | ---------------- | ------ | ----------- | ------- | ----- | --------------------------------- |
@ -100,7 +100,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/5 -H 'X-API-KEY: edd1c9f034335f13
## 示例 ## 示例
**枚举Enums验证:** **枚举Enums验证**
```json ```json
{ {
@ -118,7 +118,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/5 -H 'X-API-KEY: edd1c9f034335f13
} }
``` ```
**布尔Boolean验证:** **布尔Boolean验证**
```json ```json
{ {
@ -135,7 +135,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/5 -H 'X-API-KEY: edd1c9f034335f13
} }
``` ```
**数字范围Number or Integer验证:** **数字范围Number or Integer验证**
```json ```json
{ {
@ -153,7 +153,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/5 -H 'X-API-KEY: edd1c9f034335f13
} }
``` ```
**字符串长度String验证:** **字符串长度String验证**
```json ```json
{ {
@ -171,7 +171,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/5 -H 'X-API-KEY: edd1c9f034335f13
} }
``` ```
**正则表达式Regex验证:** **正则表达式Regex验证**
```json ```json
{ {
@ -190,7 +190,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/5 -H 'X-API-KEY: edd1c9f034335f13
} }
``` ```
**数组Array验证:** **数组Array验证**
```json ```json
{ {
@ -214,7 +214,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/5 -H 'X-API-KEY: edd1c9f034335f13
} }
``` ```
**多字段组合Multiple Fields验证:** **多字段组合Multiple Fields验证**
```json ```json
{ {
@ -247,7 +247,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/5 -H 'X-API-KEY: edd1c9f034335f13
} }
``` ```
**自定义拒绝信息:** **自定义拒绝信息**
```json ```json
{ {

View File

@ -27,9 +27,9 @@ title: response-rewrite
使用场景: 使用场景:
1可以设置 `Access-Control-Allow-*` 等 header 信息,来实现 CORS (跨域资源共享)的功能。 1. 可以设置 `Access-Control-Allow-*` 等 header 信息,来实现 CORS跨域资源共享的功能。
2另外也可以通过配置 status_code 和 header 里面的 Location 来实现重定向,当然如果只是需要重定向功能,最好使用 [redirect](redirect.md) 插件。 2. 另外也可以通过配置 status_code 和 header 里面的 Location 来实现重定向,当然如果只是需要重定向功能,最好使用 [redirect](redirect.md) 插件。
## 属性 ## 属性
@ -82,7 +82,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f1
curl -X GET -i http://127.0.0.1:9080/test/index.html curl -X GET -i http://127.0.0.1:9080/test/index.html
``` ```
如果看到返回的头部信息和内容都被修改了,即表示 `response-rewrite` 插件生效了,`vars` 将确保仅覆盖状态为 200 的响应。 如果看到返回的头部信息和内容都被修改了,即表示 `response-rewrite` 插件生效了`vars` 将确保仅覆盖状态为 200 的响应。
```shell ```shell
HTTP/1.1 200 OK HTTP/1.1 200 OK

View File

@ -45,9 +45,9 @@ title: rocketmq-logger
| name | string | 可选 | "rocketmq logger" | | batch processor 的唯一标识。 | | name | string | 可选 | "rocketmq logger" | | batch processor 的唯一标识。 |
| meta_format | enum | 可选 | "default" | ["default""origin"] | `default`:获取请求信息以默认的 JSON 编码方式。`origin`:获取请求信息以 HTTP 原始请求方式。[具体示例](#meta_format-参考示例)| | meta_format | enum | 可选 | "default" | ["default""origin"] | `default`:获取请求信息以默认的 JSON 编码方式。`origin`:获取请求信息以 HTTP 原始请求方式。[具体示例](#meta_format-参考示例)|
| include_req_body | boolean | 可选 | false | [false, true] | 是否包括请求 body 。false 表示不包含请求的 body true 表示包含请求的 body 。注意:如果请求 body 没办法完全放在内存中,由于 Nginx 的限制,我们没有办法把它记录下来。| | include_req_body | boolean | 可选 | false | [false, true] | 是否包括请求 body 。false 表示不包含请求的 body true 表示包含请求的 body 。注意:如果请求 body 没办法完全放在内存中,由于 Nginx 的限制,我们没有办法把它记录下来。|
| include_req_body_expr | array | 可选 | | | 当 `include_req_body` 开启时, 基于 [lua-resty-expr](https://github.com/api7/lua-resty-expr) 表达式的结果进行记录。如果该选项存在,只有在表达式为真的时候才会记录请求 body 。 | | include_req_body_expr | array | 可选 | | | 当 `include_req_body` 开启时基于 [lua-resty-expr](https://github.com/api7/lua-resty-expr) 表达式的结果进行记录。如果该选项存在,只有在表达式为真的时候才会记录请求 body 。 |
| include_resp_body| boolean | 可选 | false | [false, true] | 是否包括响应体。包含响应体,当为 `true` 。 | | include_resp_body| boolean | 可选 | false | [false, true] | 是否包括响应体。包含响应体,当为 `true` 。 |
| include_resp_body_expr | array | 可选 | | | 是否采集响体, 基于[lua-resty-expr](https://github.com/api7/lua-resty-expr)。 该选项需要开启 `include_resp_body` | | include_resp_body_expr | array | 可选 | | | 是否采集响体,基于 [lua-resty-expr](https://github.com/api7/lua-resty-expr)。 该选项需要开启 `include_resp_body` |
本插件支持使用批处理器来聚合并批量处理条目(日志/数据)。这样可以避免插件频繁地提交数据,默认设置情况下批处理器会每 `5` 秒钟或队列中的数据达到 `1000` 条时提交数据,如需了解或自定义批处理器相关参数设置,请参考 [Batch-Processor](../batch-processor.md#配置) 配置部分。 本插件支持使用批处理器来聚合并批量处理条目(日志/数据)。这样可以避免插件频繁地提交数据,默认设置情况下批处理器会每 `5` 秒钟或队列中的数据达到 `1000` 条时提交数据,如需了解或自定义批处理器相关参数设置,请参考 [Batch-Processor](../batch-processor.md#配置) 配置部分。

View File

@ -68,7 +68,7 @@ ngx.say(count)
### 启动插件 ### 启动插件
下面是一个示例,在指定的 route 上开启了 serverless 插件: 下面是一个示例,在指定的 route 上开启了 serverless 插件
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '

View File

@ -64,7 +64,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
## 测试插件 ## 测试插件
> 成功: > 成功
```shell ```shell
$ curl -i http://127.0.0.1:9080/hello $ curl -i http://127.0.0.1:9080/hello

View File

@ -46,7 +46,7 @@ plugins:
然后重载 APISIX这样会创建一个后台定时器向 SkyWalking OAP 服务定期上报数据。 然后重载 APISIX这样会创建一个后台定时器向 SkyWalking OAP 服务定期上报数据。
下面是一个示例,在指定的 route 上开启了 SkyWalking 插件: 下面是一个示例,在指定的 route 上开启了 SkyWalking 插件
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
@ -80,11 +80,11 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f1
| 名称 | 类型 | 默认值 | 描述 | | 名称 | 类型 | 默认值 | 描述 |
| ------------ | ------ | -------- | ----------------------------------------------------- | | ------------ | ------ | -------- | ----------------------------------------------------- |
| service_name | string | "APISIX" | SkyWalking 上报的 service 名称 | | service_name | string | "APISIX" | SkyWalking 上报的 service 名称 |
| service_instance_name | string | "APISIX Instance Name" | SkyWalking 上报的 service 实例名, 如果期望直接获取本机主机名则设置为 `$hostname` | | service_instance_name | string | "APISIX Instance Name" | SkyWalking 上报的 service 实例名如果期望直接获取本机主机名则设置为 `$hostname` |
| endpoint_addr | string | "http://127.0.0.1:12800" | SkyWalking 的 HTTP endpoint 地址例如http://127.0.0.1:12800 | | endpoint_addr | string | "http://127.0.0.1:12800" | SkyWalking 的 HTTP endpoint 地址例如http://127.0.0.1:12800 |
| report_interval | integer | 使用 SkyWalking 客户端内置的值 | 上报时间间隔,单位是秒 | | report_interval | integer | 使用 SkyWalking 客户端内置的值 | 上报时间间隔,单位是秒 |
配置示例: 配置示例
```yaml ```yaml
plugin_attr: plugin_attr:
@ -98,9 +98,9 @@ plugin_attr:
### 运行 SkyWalking 实例 ### 运行 SkyWalking 实例
#### 例子: #### 例子
1. 启动 SkyWalking OAP 服务: 1. 启动 SkyWalking OAP 服务
- SkyWalking 默认使用 H2 存储,可直接启动 - SkyWalking 默认使用 H2 存储,可直接启动
```shell ```shell
@ -138,7 +138,7 @@ plugin_attr:
![plugin_skywalking](../../../assets/images/plugin/skywalking-3.png) ![plugin_skywalking](../../../assets/images/plugin/skywalking-3.png)
3. 测试示例: 3. 测试示例
- 通过访问 APISIX访问上游服务 - 通过访问 APISIX访问上游服务
```bash ```bash

View File

@ -75,12 +75,12 @@ curl http://127.0.0.1:9080/apisix/admin/routes/5 -H 'X-API-KEY: edd1c9f034335f13
``` ```
``` ```
注释:这里的 100.100.99.135 是阿里云华北 3 内外地址。 注释这里的 100.100.99.135 是阿里云华北 3 内外地址。
``` ```
## 测试插件 ## 测试插件
* 成功的情况: * 成功的情况
```shell ```shell
$ curl -i http://127.0.0.1:9080/hello $ curl -i http://127.0.0.1:9080/hello

View File

@ -37,7 +37,7 @@ title: splunk-hec-logging
| endpoint.token | 必选 | | Splunk HEC 身份令牌 | | endpoint.token | 必选 | | Splunk HEC 身份令牌 |
| endpoint.channel | 可选 | | Splunk HEC 发送渠道标识,参考:[About HTTP Event Collector Indexer Acknowledgment](https://docs.splunk.com/Documentation/Splunk/8.2.3/Data/AboutHECIDXAck) | | endpoint.channel | 可选 | | Splunk HEC 发送渠道标识,参考:[About HTTP Event Collector Indexer Acknowledgment](https://docs.splunk.com/Documentation/Splunk/8.2.3/Data/AboutHECIDXAck) |
| endpoint.timeout | 可选 | 10 | Splunk HEC 数据提交超时时间(以秒为单位)| | endpoint.timeout | 可选 | 10 | Splunk HEC 数据提交超时时间(以秒为单位)|
| ssl_verify | 可选 | true | 启用 `SSL` 验证, 参考:[OpenResty文档](https://github.com/openresty/lua-nginx-module#tcpsocksslhandshake) | | ssl_verify | 可选 | true | 启用 `SSL` 验证,参考:[OpenResty 文档](https://github.com/openresty/lua-nginx-module#tcpsocksslhandshake) |
本插件支持使用批处理器来聚合并批量处理条目(日志/数据)。这样可以避免插件频繁地提交数据,默认设置情况下批处理器会每 `5` 秒钟或队列中的数据达到 `1000` 条时提交数据,如需了解或自定义批处理器相关参数设置,请参考 [Batch-Processor](../batch-processor.md#配置) 配置部分。 本插件支持使用批处理器来聚合并批量处理条目(日志/数据)。这样可以避免插件频繁地提交数据,默认设置情况下批处理器会每 `5` 秒钟或队列中的数据达到 `1000` 条时提交数据,如需了解或自定义批处理器相关参数设置,请参考 [Batch-Processor](../batch-processor.md#配置) 配置部分。

View File

@ -72,7 +72,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
## 测试插件 ## 测试插件
* 成功的情况: * 成功的情况
```shell ```shell
$ curl -i http://127.0.0.1:9080/hello $ curl -i http://127.0.0.1:9080/hello

View File

@ -73,7 +73,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/5 -H 'X-API-KEY: edd1c9f034335f13
## 测试插件 ## 测试插件
* 成功的情况: * 成功的情况
```shell ```shell
$ curl -i http://127.0.0.1:9080/hello $ curl -i http://127.0.0.1:9080/hello

View File

@ -30,7 +30,7 @@ traffic-split 插件使用户可以逐步引导各个上游之间的流量百分
## 属性 ## 属性
| 参数名 | 类型 | 可选项 | 默认值 | 有效值 | 描述 | | 参数名 | 类型 | 可选项 | 默认值 | 有效值 | 描述 |
| ---------------------- | --------------| ------ | ------ | ------ | -------------------- | | ---------------------- | --------------| ------ | ------ | ------ |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| rules.match | array[object] | 可选 | | | 匹配规则列表,默认为空且规则将被无条件执行。 | | rules.match | array[object] | 可选 | | | 匹配规则列表,默认为空且规则将被无条件执行。 |
| rules.match.vars | array[array] | 可选 | | | 由一个或多个{var, operator, val}元素组成的列表,类似这样:{{var, operator, val}, {var, operator, val}, ...}}。例如:{"arg_name", "==", "json"},表示当前请求参数 name 是 json。这里的 var 与 Nginx 内部自身变量命名是保持一致,所以也可以使用 request_uri、host 等;对于 operator 部分,目前已支持的运算符有 ==、~=、~~、>、<、in、has 和 ! 。操作符的具体用法请看 [lua-resty-expr](https://github.com/api7/lua-resty-expr#operator-list) 的 `operator-list` 部分。 | | rules.match.vars | array[array] | 可选 | | | 由一个或多个{var, operator, val}元素组成的列表,类似这样:{{var, operator, val}, {var, operator, val}, ...}}。例如:{"arg_name", "==", "json"},表示当前请求参数 name 是 json。这里的 var 与 Nginx 内部自身变量命名是保持一致,所以也可以使用 request_uri、host 等;对于 operator 部分,目前已支持的运算符有 ==、~=、~~、>、<、in、has 和 ! 。操作符的具体用法请看 [lua-resty-expr](https://github.com/api7/lua-resty-expr#operator-list) 的 `operator-list` 部分。 |
| rules.weighted_upstreams | array[object] | 可选 | | | 上游配置规则列表。 | | rules.weighted_upstreams | array[object] | 可选 | | | 上游配置规则列表。 |
@ -40,8 +40,8 @@ traffic-split 插件使用户可以逐步引导各个上游之间的流量百分
| upstream.hash_on | enum | 可选 | vars | | `hash_on` 支持的类型有 `vars`Nginx 内置变量),`header`(自定义 header`cookie``consumer``vars_combinations`,默认值为 `vars`。更多详细信息请参考 [upstream](../admin-api.md#upstream) 用法。 | | upstream.hash_on | enum | 可选 | vars | | `hash_on` 支持的类型有 `vars`Nginx 内置变量),`header`(自定义 header`cookie``consumer``vars_combinations`,默认值为 `vars`。更多详细信息请参考 [upstream](../admin-api.md#upstream) 用法。 |
| upstream.key | string | 可选 | | | 该选项只有类型是 `chash` 才有效。根据 `key` 来查找对应的 node `id`,相同的 `key` 在同一个对象中,永远返回相同 id。更多详细信息请参考 [upstream](../admin-api.md#upstream) 用法。 | | upstream.key | string | 可选 | | | 该选项只有类型是 `chash` 才有效。根据 `key` 来查找对应的 node `id`,相同的 `key` 在同一个对象中,永远返回相同 id。更多详细信息请参考 [upstream](../admin-api.md#upstream) 用法。 |
| upstream.nodes | object | 可选 | | | 哈希表,内部元素的 key 是上游机器地址 列表,格式为地址 + Port其中地址部 分可以是 IP 也可以是域名,⽐如 192.168.1.100:80、foo.com:80 等。 value 则是节点的权重,特别的,当权重 值为 0 有特殊含义,通常代表该上游节点 失效,永远不希望被选中。 | | upstream.nodes | object | 可选 | | | 哈希表,内部元素的 key 是上游机器地址 列表,格式为地址 + Port其中地址部 分可以是 IP 也可以是域名,⽐如 192.168.1.100:80、foo.com:80 等。 value 则是节点的权重,特别的,当权重 值为 0 有特殊含义,通常代表该上游节点 失效,永远不希望被选中。 |
| upstream.timeout | object | 可选 | 15 | | 设置连接、发送消息、接收消息的超时时间(时间单位:秒,都默认为 15 秒)。 | | upstream.timeout | object | 可选 | 15 | | 设置连接、发送消息、接收消息的超时时间(时间单位:秒,都默认为 15 秒)。 |
| upstream.pass_host | enum | 可选 | "pass" | ["pass", "node", "rewrite"] | `pass`: 将客户端的 host 透传给上游; `node`: 使用 `upstream` node 中配置的 host `rewrite`: 使用配置项 `upstream_host` 的值 | | upstream.pass_host | enum | 可选 | "pass" | ["pass", "node", "rewrite"] | `pass`:将客户端的 host 透传给上游; `node`:使用 `upstream` node 中配置的 host `rewrite`:使用配置项 `upstream_host` 的值 |
| upstream.name | string | 可选 | | | 标识上游服务名称、使⽤场景等。 | | upstream.name | string | 可选 | | | 标识上游服务名称、使⽤场景等。 |
| upstream.upstream_host | string | 可选 | | | 只在 pass_host 配置为 rewrite 时有效。 | | upstream.upstream_host | string | 可选 | | | 只在 pass_host 配置为 rewrite 时有效。 |
| weighted_upstreams.weight | integer | 可选 | weight = 1 | | 根据 `weight` 值做流量划分,多个 weight 之间使用 roundrobin 算法划分。 | | weighted_upstreams.weight | integer | 可选 | weight = 1 | | 根据 `weight` 值做流量划分,多个 weight 之间使用 roundrobin 算法划分。 |
@ -190,7 +190,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
}' }'
``` ```
**插件测试:** **插件测试**
请求 5 次3 次请求命中插件 1981 端口的 upstream, 2 次请求命中 `route` 的 1980 端口 upstream。 请求 5 次3 次请求命中插件 1981 端口的 upstream, 2 次请求命中 `route` 的 1980 端口 upstream。
@ -332,7 +332,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
**插件测试:** **插件测试:**
>1、在 `match` 规则校验通过后, 60% 的请求命中到插件的 1981 端口的 upstream, 40% 的请求命中到 `route` 的 1980 端口的 upstream。 >1、在 `match` 规则校验通过后60% 的请求命中到插件的 1981 端口的 upstream, 40% 的请求命中到 `route` 的 1980 端口的 upstream。
match 规则校验成功, 命中端口为 `1981` 的 upstream。 match 规则校验成功, 命中端口为 `1981` 的 upstream。
@ -427,7 +427,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
**测试插件:** **测试插件:**
>1、两个 `vars` 的表达式匹配成功, `match` 规则校验通过后, 60% 的请求命中到插件的1981端口 upstream, 40% 的请求命中到 `route` 的1980端口upstream。 >1、两个 `vars` 的表达式匹配成功, `match` 规则校验通过后60% 的请求命中到插件的 1981 端口 upstream, 40% 的请求命中到 `route` 1980 端口 upstream。
```shell ```shell
$ curl 'http://127.0.0.1:9080/index.html?name=jack&name2=rose' -H 'user-id:30' -H 'user-id2:22' -H 'apisix-key: hello' -H 'apisix-key2: world' -i $ curl 'http://127.0.0.1:9080/index.html?name=jack&name2=rose' -H 'user-id:30' -H 'user-id2:22' -H 'apisix-key: hello' -H 'apisix-key2: world' -i
@ -449,7 +449,7 @@ hello 1980
在请求 5 次后3 次命中 `1981` 端口的服务2 次命中 `1980` 端口的服务。 在请求 5 次后3 次命中 `1981` 端口的服务2 次命中 `1980` 端口的服务。
>2、第二个 `vars` 的表达式匹配失败(缺少 `name2` 请求参数),`match` 规则校验通过后, 60% 的请求命中到插件的 1981 端口 upstream, 40% 的请求流量命中到 `route` 的 1980 端口 upstream。 >2、第二个 `vars` 的表达式匹配失败(缺少 `name2` 请求参数),`match` 规则校验通过后60% 的请求命中到插件的 1981 端口 upstream, 40% 的请求流量命中到 `route` 的 1980 端口 upstream。
```shell ```shell
$ curl 'http://127.0.0.1:9080/index.html?name=jack' -H 'user-id:30' -H 'user-id2:22' -H 'apisix-key: hello' -H 'apisix-key2: world' -i $ curl 'http://127.0.0.1:9080/index.html?name=jack' -H 'user-id:30' -H 'user-id2:22' -H 'apisix-key: hello' -H 'apisix-key2: world' -i
@ -471,7 +471,7 @@ hello 1980
在请求 5 次后3 次命中 `1981` 端口的服务2 次命中 `1980` 端口的服务。 在请求 5 次后3 次命中 `1981` 端口的服务2 次命中 `1980` 端口的服务。
>3、两个 `vars` 的表达式校验失败(缺少 `name``name2` 请求参数),`match` 规则校验失败, 响应都为默认 `route` 的 upstream 数据 `hello 1980` >3、两个 `vars` 的表达式校验失败(缺少 `name``name2` 请求参数),`match` 规则校验失败响应都为默认 `route` 的 upstream 数据 `hello 1980`
```shell ```shell
$ curl 'http://127.0.0.1:9080/index.html?name=jack' -i $ curl 'http://127.0.0.1:9080/index.html?name=jack' -i

View File

@ -38,7 +38,7 @@ title: ua-restriction
## 如何启用 ## 如何启用
下面是一个示例,在指定的 route 上开启了 `ua-restriction` 插件: 下面是一个示例,在指定的 route 上开启了 `ua-restriction` 插件
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
@ -66,7 +66,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
}' }'
``` ```
当未允许的 User-Agent 访问时,默认返回 `{"message":"Not allowed"}`。如果你想使用自定义的 `message`,可以在插件部分进行配置: 当未允许的 User-Agent 访问时,默认返回 `{"message":"Not allowed"}`。如果你想使用自定义的 `message`,可以在插件部分进行配置
```json ```json
"plugins": { "plugins": {

View File

@ -71,7 +71,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/5 -H 'X-API-KEY: edd1c9f034335f13
## 测试插件 ## 测试插件
* 成功的情况: * 成功的情况
```shell ```shell
$ curl -i http://127.0.0.1:9080/hello $ curl -i http://127.0.0.1:9080/hello

View File

@ -29,7 +29,7 @@ title: uri-blocker
| 名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 | | 名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 |
| ------------- | ------------- | ------ | ------ | ---------- | ------------------------------------------------------------------- | | ------------- | ------------- | ------ | ------ | ---------- | ------------------------------------------------------------------- |
| block_rules | array[string] | 必须 | | | 正则过滤数组。它们都是正则规则,如果当前请求 URI 命中任何一个,请将响应代码设置为 rejected_code 以退出当前用户请求。例如: `["root.exe", "root.m+"]`。 | | block_rules | array[string] | 必须 | | | 正则过滤数组。它们都是正则规则,如果当前请求 URI 命中任何一个,请将响应代码设置为 rejected_code 以退出当前用户请求。例如`["root.exe", "root.m+"]`。 |
| rejected_code | integer | 可选 | 403 | [200, ...] | 当请求 URI 命中 `block_rules` 中的任何一个时,将返回的 HTTP 状态代码。 | | rejected_code | integer | 可选 | 403 | [200, ...] | 当请求 URI 命中 `block_rules` 中的任何一个时,将返回的 HTTP 状态代码。 |
| rejected_msg | string | 可选 | | 非空 | 当请求 URI 命中 `block_rules` 中的任何一个时,将返回的 HTTP 响应体。 | | rejected_msg | string | 可选 | | 非空 | 当请求 URI 命中 `block_rules` 中的任何一个时,将返回的 HTTP 响应体。 |
| case_insensitive | boolean | 可选 | false | | 是否忽略大小写。当值为 true 时,在匹配请求 URI 时将忽略大小写。默认值是 false 。 | | case_insensitive | boolean | 可选 | false | | 是否忽略大小写。当值为 true 时,在匹配请求 URI 时将忽略大小写。默认值是 false 。 |

View File

@ -24,15 +24,15 @@ title: wolf-rbac
## 描述 ## 描述
`wolf-rbac` 是一个认证及授权 (rbac) 插件,它需要与 `consumer` 一起配合才能工作。同时需要添加 `wolf-rbac` 到一个 `service``route` 中。 `wolf-rbac` 是一个认证及授权 (rbac) 插件,它需要与 `consumer` 一起配合才能工作。同时需要添加 `wolf-rbac` 到一个 `service``route` 中。
rbac 功能由 [wolf](https://github.com/iGeeky/wolf) 提供, 有关 `wolf` 的更多信息, 请参考 [wolf 文档](https://github.com/iGeeky/wolf)。 rbac 功能由 [wolf](https://github.com/iGeeky/wolf) 提供,有关 `wolf` 的更多信息,请参考 [wolf 文档](https://github.com/iGeeky/wolf)。
## 属性 ## 属性
| 名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 | | 名称 | 类型 | 必选项 | 默认值 | 有效值 | 描述 |
| ------------- | ------ | ------ | ------------------------ | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------- | | ------------- | ------ | ------ | ------------------------ | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| server | string | 可选 | "http://127.0.0.1:12180" | | 设置 `wolf-server` 的访问地址 | | server | string | 可选 | "http://127.0.0.1:12180" | | 设置 `wolf-server` 的访问地址 |
| appid | string | 可选 | "unset" | | 设置应用 id, 该应用 id, 需要是在 `wolf-console` 中已经添加的应用 id | | appid | string | 可选 | "unset" | | 设置应用 id,该应用 id需要是在 `wolf-console` 中已经添加的应用 id |
| header_prefix | string | 可选 | "X-" | | 自定义 http 头的前缀。`wolf-rbac`在鉴权成功后, 会在请求头(用于传给后端)及响应头(用于传给前端)中添加 3 个头: `X-UserId`, `X-Username`, `X-Nickname` | | header_prefix | string | 可选 | "X-" | | 自定义 http 头的前缀。`wolf-rbac`在鉴权成功后,会在请求头 (用于传给后端) 及响应头 (用于传给前端) 中添加 3 个头:`X-UserId`, `X-Username`, `X-Nickname` |
## 接口 ## 接口
@ -46,11 +46,11 @@ rbac 功能由 [wolf](https://github.com/iGeeky/wolf) 提供, 有关 `wolf` 的
## 依赖项 ## 依赖项
### 安装 wolf, 并启动服务 ### 安装 wolf并启动服务
[Wolf 快速起步](https://github.com/iGeeky/wolf/blob/master/quick-start-with-docker/README-CN.md) [Wolf 快速起步](https://github.com/iGeeky/wolf/blob/master/quick-start-with-docker/README-CN.md)
### 添加应用, 管理员, 普通用户, 权限, 资源 及给用户授权. ### 添加应用,管理员,普通用户,权限,资源 及给用户授权
[Wolf 管理使用](https://github.com/iGeeky/wolf/blob/master/docs/usage.md) [Wolf 管理使用](https://github.com/iGeeky/wolf/blob/master/docs/usage.md)
@ -78,7 +78,7 @@ curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f
然后在 consumer 页面中添加 wolf-rbac 插件: 然后在 consumer 页面中添加 wolf-rbac 插件:
![enable wolf-rbac plugin](../../../assets/images/plugin/wolf-rbac-2.png) ![enable wolf-rbac plugin](../../../assets/images/plugin/wolf-rbac-2.png)
注意: 上面填写的 `appid` 需要在 wolf 控制台中已经存在的. 注意:上面填写的 `appid` 需要在 wolf 控制台中已经存在的。
2. 创建 Route 或 Service 对象,并开启 `wolf-rbac` 插件。 2. 创建 Route 或 Service 对象,并开启 `wolf-rbac` 插件。
@ -119,10 +119,10 @@ $ curl http://127.0.0.1:9080/apisix/admin/routes/wal -H 'X-API-KEY: edd1c9f03433
#### 首先进行登录获取 `wolf-rbac` token: #### 首先进行登录获取 `wolf-rbac` token:
下面的 `appid`, `username`, `password` 必须为 wolf 系统中真实存在的. 下面的 `appid`, `username`, `password` 必须为 wolf 系统中真实存在的
`authType` 为认证类型, `1` 为密码认证, `2``LDAP` 认证. 默认为 `1`. `wolf` 从 0.5.0 版本开始支持了 `LDAP` 认证. `authType` 为认证类型`1` 为密码认证,`2` 为 `LDAP` 认证。默认为 `1`. `wolf` 从 0.5.0 版本开始支持了 `LDAP` 认证。
* 以 POST application/json 方式登陆. * 以 POST application/json 方式登陆
```shell ```shell
curl http://127.0.0.1:9080/apisix/plugin/wolf-rbac/login -i \ curl http://127.0.0.1:9080/apisix/plugin/wolf-rbac/login -i \

View File

@ -61,7 +61,7 @@ request
## 如何启用 ## 如何启用
下面是一个示例,在指定的 route 上开启了 zipkin 插件: 下面是一个示例,在指定的 route 上开启了 zipkin 插件
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
@ -99,7 +99,7 @@ e.g. 用 docker:
docker run -d -p 9411:9411 openzipkin/zipkin docker run -d -p 9411:9411 openzipkin/zipkin
``` ```
测试示例: 测试示例
```shell ```shell
curl http://127.0.0.1:9080/index.html curl http://127.0.0.1:9080/index.html

View File

@ -55,7 +55,7 @@ title: 路由 RadixTree
完全匹配 -> 深度前缀匹配 完全匹配 -> 深度前缀匹配
以下是规则: 以下是规则
```text ```text
/blog/foo/* /blog/foo/*
@ -110,7 +110,7 @@ $ curl http://127.0.0.1:9080/apisix/admin/routes/2 -H 'X-API-KEY: edd1c9f034335f
}' }'
``` ```
测试: 测试
```shell ```shell
curl http://127.0.0.1:1980/hello curl http://127.0.0.1:1980/hello
@ -151,7 +151,7 @@ $ curl http://127.0.0.1:9080/apisix/admin/routes/2 -H 'X-API-KEY: edd1c9f034335f
}' }'
``` ```
测试: 测试
```shell ```shell
$ curl http://127.0.0.1:9080/hello -H 'host: localhost.com' $ curl http://127.0.0.1:9080/hello -H 'host: localhost.com'
@ -194,7 +194,7 @@ apisix:
### 如何通过 Nginx 内置变量过滤路由 ### 如何通过 Nginx 内置变量过滤路由
具体参数及使用方式请查看 [radixtree#new](https://github.com/api7/lua-resty-radixtree#new) 文档,下面是一个简单的示例: 具体参数及使用方式请查看 [radixtree#new](https://github.com/api7/lua-resty-radixtree#new) 文档,下面是一个简单的示例
```shell ```shell
$ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d ' $ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '

View File

@ -23,9 +23,9 @@ title: TCP/UDP 动态代理
众多的闻名的应用和服务,像 LDAP、 MYSQL 和 RTMP ,选择 TCP 作为通信协议。 但是像 DNS、 syslog 和 RADIUS 这类非事务性的应用,他们选择了 UDP 协议。 众多的闻名的应用和服务,像 LDAP、 MYSQL 和 RTMP ,选择 TCP 作为通信协议。 但是像 DNS、 syslog 和 RADIUS 这类非事务性的应用,他们选择了 UDP 协议。
APISIX 可以对 TCP/UDP 协议进行代理并实现动态负载均衡。 在 nginx 世界,称 TCP/UDP 代理为 stream 代理,在 APISIX 这里我们也遵循了这个声明. APISIX 可以对 TCP/UDP 协议进行代理并实现动态负载均衡。 在 nginx 世界,称 TCP/UDP 代理为 stream 代理,在 APISIX 这里我们也遵循了这个声明
## 如何开启 Stream 代理? ## 如何开启 Stream 代理
`conf/config.yaml` 配置文件设置 `stream_proxy` 选项, 指定一组需要进行动态代理的 IP 地址。默认情况不开启 stream 代理。 `conf/config.yaml` 配置文件设置 `stream_proxy` 选项, 指定一组需要进行动态代理的 IP 地址。默认情况不开启 stream 代理。
@ -53,9 +53,9 @@ apisix:
- 9100 - 9100
``` ```
## 如何设置 route ? ## 如何设置 route
简例如下: 简例如下
```shell ```shell
curl http://127.0.0.1:9080/apisix/admin/stream_routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' curl http://127.0.0.1:9080/apisix/admin/stream_routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '