diff --git a/FAQ_CN.md b/FAQ_CN.md
index 720b798df630..334fc693c739 100644
--- a/FAQ_CN.md
+++ b/FAQ_CN.md
@@ -45,7 +45,7 @@ APISIX 是当前性能最好的 API 网关,单核 QPS 达到 2.3 万,平均
当然可以,APISIX 提供了灵活的自定义插件,方便开发者和企业编写自己的逻辑。
-[如何开发插件](doc/plugin-develop-cn.md)
+[如何开发插件](doc/zh-cn/plugin-develop.md)
## 我们为什么选择 etcd 作为配置中心?
diff --git a/README.md b/README.md
index 08e1d57caa25..da9ccf16de28 100644
--- a/README.md
+++ b/README.md
@@ -78,7 +78,7 @@ A/B testing, canary release, blue-green deployment, limit rate, defense against
- Support [various operators as judgment conditions for routing](https://github.com/iresty/lua-resty-radixtree#operator-list), for example `{"arg_age", ">", 24}`
- Support [custom route matching function](https://github.com/iresty/lua-resty-radixtree/blob/master/t/filter-fun.t#L10)
- IPv6: Use IPv6 to match route.
- - Support [TTL](doc/admin-api-cn.md#route)
+ - Support [TTL](doc/zh-cn/admin-api.md#route)
- [Support priority](doc/router-radixtree.md#3-match-priority)
- [Support Batch Http Requests](doc/plugins/batch-requests.md)
diff --git a/README_CN.md b/README_CN.md
index b51476a8b3fa..1fbd99814699 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -51,26 +51,26 @@ A/B 测试、金丝雀发布(灰度发布)、蓝绿部署、限流限速、抵
- 支持 ARM64: 不用担心底层技术的锁定。
- **多协议**
- - [TCP/UDP 代理](doc/stream-proxy-cn.md): 动态 TCP/UDP 代理。
- - [动态 MQTT 代理](doc/plugins/mqtt-proxy-cn.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 代理](doc/grpc-proxy-cn.md):通过 APISIX 代理 gRPC 连接,并使用 APISIX 的大部分特性管理你的 gRPC 服务。
+ - [TCP/UDP 代理](doc/zh-cn/stream-proxy.md): 动态 TCP/UDP 代理。
+ - [动态 MQTT 代理](doc/zh-cn/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 代理](doc/zh-cn/grpc-proxy.md):通过 APISIX 代理 gRPC 连接,并使用 APISIX 的大部分特性管理你的 gRPC 服务。
- [gRPC 协议转换](doc/plugins/grpc-transcoding-cn.md):支持协议的转换,这样客户端可以通过 HTTP/JSON 来访问你的 gRPC API。
- Websocket 代理
- Proxy Protocol
- Dubbo 代理:基于 Tengine,可以实现 Dubbo 请求的代理。
- HTTP(S) 反向代理
- - [SSL](doc/https-cn.md):动态加载 SSL 证书。
+ - [SSL](doc/zh-cn/https.md):动态加载 SSL 证书。
- **全动态能力**
- - [热更新和热插件](doc/plugins-cn.md): 无需重启服务,就可以持续更新配置和插件。
- - [代理请求重写](doc/plugins/proxy-rewrite-cn.md): 支持重写请求上游的`host`、`uri`、`schema`、`enable_websocket`、`headers`信息。
- - [输出内容重写](doc/plugins/response-rewrite-cn.md): 支持自定义修改返回内容的 `status code`、`body`、`headers`。
- - [Serverless](doc/plugins/serverless-cn.md): 在 APISIX 的每一个阶段,你都可以添加并调用自己编写的函数。
+ - [热更新和热插件](doc/zh-cn/plugins.md): 无需重启服务,就可以持续更新配置和插件。
+ - [代理请求重写](doc/zh-cn/plugins/proxy-rewrite.md): 支持重写请求上游的`host`、`uri`、`schema`、`enable_websocket`、`headers`信息。
+ - [输出内容重写](doc/zh-cn/plugins/response-rewrite.md): 支持自定义修改返回内容的 `status code`、`body`、`headers`。
+ - [Serverless](doc/zh-cn/plugins/serverless.md): 在 APISIX 的每一个阶段,你都可以添加并调用自己编写的函数。
- 动态负载均衡:动态支持有权重的 round-robin 负载平衡。
- 支持一致性 hash 的负载均衡:动态支持一致性 hash 的负载均衡。
- [健康检查](doc/health-check.md):启用上游节点的健康检查,将在负载均衡期间自动过滤不健康的节点,以确保系统稳定性。
- 熔断器: 智能跟踪不健康上游服务。
- - [动态服务发现](doc/discovery-cn.md):支持基于注册中心的服务发现功能,降低反向代理维护成本。
+ - [动态服务发现](doc/zh-cn/discovery.md):支持基于注册中心的服务发现功能,降低反向代理维护成本。
- **精细化路由**
- [支持全路径匹配和前缀匹配](doc/router-radixtree.md#how-to-use-libradixtree-in-apisix)
@@ -78,37 +78,37 @@ A/B 测试、金丝雀发布(灰度发布)、蓝绿部署、限流限速、抵
- 支持[各类操作符做为路由的判断条件](https://github.com/iresty/lua-resty-radixtree#operator-list),比如 `{"arg_age", ">", 24}`
- 支持[自定义路由匹配函数](https://github.com/iresty/lua-resty-radixtree/blob/master/t/filter-fun.t#L10)
- IPv6:支持使用 IPv6 格式匹配路由
- - 支持路由的[自动过期(TTL)](doc/admin-api-cn.md#route)
+ - 支持路由的[自动过期(TTL)](doc/zh-cn/admin-api.md#route)
- [支持路由的优先级](doc/router-radixtree.md#3-match-priority)
- - [支持批量 Http 请求](doc/plugins/batch-requests-cn.md)
+ - [支持批量 Http 请求](doc/zh-cn/plugins/batch-requests.md)
- **安全防护**
- - 多种身份认证方式: [key-auth](doc/plugins/key-auth-cn.md), [JWT](doc/plugins/jwt-auth-cn.md), [basic-auth](doc/plugins/basic-auth-cn.md), [wolf-rbac](doc/plugins/wolf-rbac-cn.md)。
- - [IP 黑白名单](doc/plugins/ip-restriction-cn.md)
+ - 多种身份认证方式: [key-auth](doc/zh-cn/plugins/key-auth.md), [JWT](doc/zh-cn/plugins/jwt-auth.md), [basic-auth](doc/zh-cn/plugins/basic-auth.md), [wolf-rbac](doc/zh-cn/plugins/wolf-rbac.md)。
+ - [IP 黑白名单](doc/zh-cn/plugins/ip-restriction.md)
- [IdP 支持](doc/plugins/oauth.md): 支持外部的身份认证服务,比如 Auth0,Okta,Authing 等,用户可以借此来对接 Oauth2.0 等认证方式。
- - [限制速率](doc/plugins/limit-req-cn.md)
- - [限制请求数](doc/plugins/limit-count-cn.md)
- - [限制并发](doc/plugins/limit-conn-cn.md)
+ - [限制速率](doc/zh-cn/plugins/limit-req.md)
+ - [限制请求数](doc/zh-cn/plugins/limit-count.md)
+ - [限制并发](doc/zh-cn/plugins/limit-conn.md)
- 防御 ReDoS(正则表达式拒绝服务):内置策略,无需配置即可抵御 ReDoS。
- - [CORS](doc/plugins/cors-cn.md)
+ - [CORS](doc/zh-cn/plugins/cors.md)
- **运维友好**
- - OpenTracing 可观测性: 支持 [Apache Skywalking](doc/plugins/skywalking-cn.md) 和 [Zipkin](doc/plugins/zipkin-cn.md)。
- - 监控和指标: [Prometheus](doc/plugins/prometheus-cn.md)
+ - OpenTracing 可观测性: 支持 [Apache Skywalking](doc/zh-cn/plugins/skywalking.md) 和 [Zipkin](doc/zh-cn/plugins/zipkin.md)。
+ - 监控和指标: [Prometheus](doc/zh-cn/plugins/prometheus.md)
- 集群:APISIX 节点是无状态的,创建配置中心集群请参考 [etcd Clustering Guide](https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/clustering.md)。
- 高可用:支持配置同一个集群内的多个 etcd 地址。
- 控制台: 内置控制台来操作 APISIX 集群。
- 版本控制:支持操作的多次回滚。
- CLI: 使用命令行来启动、关闭和重启 APISIX。
- - [单机模式](doc/stand-alone-cn.md): 支持从本地配置文件中加载路由规则,在 kubernetes(k8s) 等环境下更友好。
- - [全局规则](doc/architecture-design-cn.md#Global-Rule):允许对所有请求执行插件,比如黑白名单、限流限速等。
+ - [单机模式](doc/zh-cn/stand-alone.md): 支持从本地配置文件中加载路由规则,在 kubernetes(k8s) 等环境下更友好。
+ - [全局规则](doc/zh-cn/architecture-design.md#Global-Rule):允许对所有请求执行插件,比如黑白名单、限流限速等。
- 高性能:在单核上 QPS 可以达到 18k,同时延迟只有 0.2 毫秒。
- - [故障注入](doc/plugins/fault-injection-cn.md)
- - [REST Admin API](doc/admin-api-cn.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` 字段,来保证安全。**
+ - [故障注入](doc/zh-cn/plugins/fault-injection.md)
+ - [REST Admin API](doc/zh-cn/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](doc/plugins/http-logger.md), [TCP Logger](doc/plugins/tcp-logger.md), [Kafka Logger](doc/plugins/kafka-logger.md), [UDP Logger](doc/plugins/udp-logger.md))
- **高度可扩展**
- - [自定义插件](doc/plugin-develop-cn.md): 允许挂载常见阶段,例如`init`, `rewrite`,`access`,`balancer`,`header filer`,`body filter` 和 `log` 阶段。
+ - [自定义插件](doc/zh-cn/plugin-develop.md): 允许挂载常见阶段,例如`init`, `rewrite`,`access`,`balancer`,`header filer`,`body filter` 和 `log` 阶段。
- 自定义负载均衡算法:可以在 `balancer` 阶段使用自定义负载均衡算法。
- 自定义路由: 支持用户自己实现路由算法。
@@ -119,11 +119,11 @@ APISIX 在以下操作系统中可顺利安装并做过运行测试,需要注
CentOS 7, Ubuntu 16.04, Ubuntu 18.04, Debian 9, Debian 10, macOS, **ARM64** Ubuntu 18.04
安装 APISIX 的步骤:
-1. 安装运行时依赖:OpenResty 和 etcd,参考[依赖安装文档](doc/install-dependencies-cn.md)
+1. 安装运行时依赖:OpenResty 和 etcd,参考[依赖安装文档](doc/zh-cn/install-dependencies.md)
2. 有以下几种方式来安装 Apache APISIX:
- - 通过[源码包安装](doc/how-to-build-cn.md#通过源码包安装);
- - 如果你在使用 CentOS 7,可以使用 [RPM 包安装](doc/how-to-build-cn.md#通过-rpm-包安装centos-7);
- - 其它 Linux 操作系统,可以使用 [Luarocks 安装方式](doc/how-to-build-cn.md#通过-luarocks-安装-不支持-macos);
+ - 通过[源码包安装](doc/zh-cn/how-to-build.md#通过源码包安装);
+ - 如果你在使用 CentOS 7,可以使用 [RPM 包安装](doc/zh-cn/how-to-build.md#通过-rpm-包安装centos-7);
+ - 其它 Linux 操作系统,可以使用 [Luarocks 安装方式](doc/zh-cn/how-to-build.md#通过-luarocks-安装-不支持-macos);
- 你也可以使用 [Docker 镜像](https://github.com/apache/incubator-apisix-docker) 来安装。
## 快速上手
@@ -136,9 +136,9 @@ sudo apisix start
2. 入门指南
-入门指南是学习 APISIX 基础知识的好方法。按照 [入门指南](doc/getting-started-cn.md)的步骤即可。
+入门指南是学习 APISIX 基础知识的好方法。按照 [入门指南](doc/zh-cn/getting-started.md)的步骤即可。
-更进一步,你可以跟着文档来尝试更多的[插件](doc/README_CN.md#插件)。
+更进一步,你可以跟着文档来尝试更多的[插件](doc/zh-cn/README.md#插件)。
## 控制台
@@ -176,7 +176,7 @@ Dashboard 默认只允许 127.0.0.1 访问。你可以自行修改 `conf/config.
## 文档
-[Apache APISIX 文档索引](doc/README_CN.md)
+[Apache APISIX 文档索引](doc/zh-cn/README.md)
## Apache APISIX 和 Kong 的比较
diff --git a/doc/README.md b/doc/README.md
index 2f6c617a76b8..042012d8a12a 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -16,12 +16,12 @@
# limitations under the License.
#
-->
-[Chinese](README_CN.md)
+[Chinese](./zh-cn/README.md)
Reference Documentation
==================
-* [APISIX Readme](../README.md)
+* [APISIX Readme](./README.md)
* [Architecture Design](architecture-design.md)
* [Benchmark](benchmark.md)
* [Getting Started Guide](getting-started.md)
diff --git a/doc/README_CN.md b/doc/README_CN.md
deleted file mode 100644
index 93c39b493f85..000000000000
--- a/doc/README_CN.md
+++ /dev/null
@@ -1,69 +0,0 @@
-
-[English](README.md)
-
-Reference document
-==================
-
-* [APISIX 说明](../README_CN.md)
-* [架构设计](architecture-design-cn.md)
-* [压力测试](benchmark-cn.md)
-* [如何构建 Apache APISIX](how-to-build-cn.md)
-* [健康检查](health-check-cn.md): 支持对上游节点的主动和被动健康检查,在负载均衡时自动过滤掉不健康的节点。
-* Router(路由)
- * [radixtree](router-radixtree.md)
- * [r3](router-r3.md)
-* [独立运行模型](stand-alone-cn.md): 支持从本地 yaml 格式的配置文件启动,更适合 Kubernetes(k8s) 体系。
-* [TCP/UDP 动态代理](stream-proxy-cn.md)
-* [管理 API](admin-api-cn.md)
-* [变更日志](../CHANGELOG_CN.md)
-* [代码风格](../CODE_STYLE.md)
-* [常见问答](../FAQ_CN.md)
-
-插件
-===
-
-* [插件热加载](plugins-cn.md):无需重启服务,完成插件热加载或卸载。
-* [HTTPS](https-cn.md):根据 TLS 扩展字段 SNI(Server Name Indication) 动态加载证书。
-* [动态负载均衡](architecture-design-cn.md#upstream):跨多个上游服务的动态负载均衡,目前已支持 round-robin 和一致性哈希算法。
-* [key-auth](plugins/key-auth-cn.md):基于 Key Authentication 的用户认证。
-* [JWT-auth](plugins/jwt-auth-cn.md):基于 [JWT](https://jwt.io/) (JSON Web Tokens) Authentication 的用户认证。
-* [basic-auth](plugins/basic-auth-cn.md):基于 basic auth 的用户认证。
-* [wolf-rbac](plugins/wolf-rbac-cn.md) 基于 *RBAC* 的用户认证及授权。
-* [limit-count](plugins/limit-count-cn.md):基于“固定窗口”的限速实现。
-* [limit-req](plugins/limit-req-cn.md):基于漏桶原理的请求限速实现。
-* [limit-conn](plugins/limit-conn-cn.md):限制并发请求(或并发连接)。
-* [proxy-rewrite](plugins/proxy-rewrite-cn.md): 支持自定义修改 proxy 到上游的信息。
-* [prometheus](plugins/prometheus-cn.md):以 Prometheus 格式导出 APISIX 自身的状态信息,方便被外部 Prometheus 服务抓取。
-* [OpenTracing](plugins/zipkin-cn.md):支持 Zikpin 和 Apache SkyWalking。
-* [grpc-transcode](plugins/grpc-transcode-cn.md):REST <--> gRPC 转码。
-* [serverless](plugins/serverless-cn.md):允许在 APISIX 中的不同阶段动态运行 Lua 代码。
-* [ip-restriction](plugins/ip-restriction-cn.md): IP 黑白名单。
-* [openid-connect](plugins/oauth.md)
-* [redirect](plugins/redirect-cn.md): URI 重定向。
-* [response-rewrite](plugins/response-rewrite-cn.md): 支持自定义修改返回内容的 `status code`、`body`、`headers`。
-* [fault-injection](plugins/fault-injection-cn.md):故障注入,可以返回指定的响应体、响应码和响应时间,从而提供了不同的失败场景下处理的能力,例如服务失败、服务过载、服务高延时等。
-* [proxy-cache](plugins/proxy-cache-cn.md):代理缓存插件提供缓存后端响应数据的能力。
-* [proxy-mirror](plugins/proxy-mirror-cn.md):代理镜像插件提供镜像客户端请求的能力。
-* [udp-logger](plugins/udp-logger.md): 将请求记录到UDP服务器
-* [tcp-logger](plugins/tcp-logger.md): 将请求记录到TCP服务器
-* [kafka-logger](plugins/kafka-logger-cn.md): 将请求记录到外部Kafka服务器。
-* [cors](plugins/cors-cn.md): 为你的API启用CORS.
-* [batch-requests](plugins/batch-requests-cn.md): 以 **http pipeline** 的方式在网关一次性发起多个 `http` 请求。
-* [authz-keycloak](plugins/authz-keycloak-cn.md): 支持 Keycloak 身份认证服务器
diff --git a/doc/_navbar.md b/doc/_navbar.md
new file mode 100644
index 000000000000..1612e7d8a96e
--- /dev/null
+++ b/doc/_navbar.md
@@ -0,0 +1,22 @@
+
+
+- Translations
+ - [:uk: English](/)
+ - [:cn: 中文](/zh-cn/)
diff --git a/doc/_sidebar.md b/doc/_sidebar.md
new file mode 100644
index 000000000000..6a9c1e551167
--- /dev/null
+++ b/doc/_sidebar.md
@@ -0,0 +1,103 @@
+
+
+- Getting started
+
+ - [Introduction](README.md)
+ - [Quick start](getting-started.md)
+
+- General
+
+ - [Architecture](architecture-design.md)
+
+ - [Benchmark](benchmark.md)
+
+ - Installation
+
+ - [How to build](how-to-build.md)
+ - [Install Dependencies](install-dependencies.md)
+
+ - [HTTPS](https.md)
+
+ - [Router](router-radixtree.md)
+
+ - Plugins
+
+ - [Develop Plugins](plugin-develop.md)
+ - [Hot Reload](plugins.md)
+
+ - Proxy Modes
+
+ - [GRPC Proxy](grpc-proxy.md)
+ - [Stream Proxy](stream-proxy.md)
+
+- Plugins
+
+ - Authentication
+
+ - [Key Auth](plugins/key-auth.md)
+ - [Basic Auth](plugins/basic-auth.md)
+ - [JWT Auth](plugins/jwt-auth.md)
+ - [Opend ID Connect](plugins/oauth.md)
+
+ - General
+
+ - [Redirect](plugins/redirect.md)
+ - [Serverless](plugins/serverless.md)
+ - [Batch Request](plugins/batch-requests.md)
+ - [Fault Injection](plugins/fault-injection.md)
+ - [MQTT Proxy](plugins/mqtt-proxy.md)
+ - [Proxy Cache](plugins/proxy-cache.md)
+ - [Proxy Mirror](plugins/proxy-mirror.md)
+ - [Echo](plugins/echo.md)
+
+ - Transformations
+
+ - [Response Rewrite](plugins/response-rewrite.md)
+ - [Proxy Rewrite](plugins/proxy-rewrite.md)
+ - [GRPC Transcoding](plugins/grpc-transcode.md)
+
+ - Security
+
+ - [Consumer Restriction](plugins/consumer-restriction.md)
+ - [Limit Connection](plugins/limit-conn.md)
+ - [Limit Count](plugins/limit-count.md)
+ - [Limit Request](plugins/limit-req.md)
+ - [CORS](plugins/cors.md)
+ - [IP Restriction](plugins/ip-restriction.md)
+ - [Keycloak Authorization](plugins/authz-keycloak.md)
+ - [RBAC Wolf](plugins/wolf-rbac.md)
+
+ - Monitoring
+
+ - [Prometheus](plugins/prometheus.md)
+ - [SKywalking](plugins/skywalking.md)
+ - [Zipkin](plugins/zipkin.md)
+
+ - Loggers
+
+ - [HTTP Logger](plugins/http-logger.md)
+ - [Kafka Logger](plugins/kafka-logger.md)
+ - [Syslog](plugins/syslog.md)
+ - [TCP Logger](plugins/tcp-logger.md)
+ - [UDP Logger](plugins/udp-logger.md)
+
+- Admin API
+
+ - [Admin API](admin-api.md)
diff --git a/doc/admin-api.md b/doc/admin-api.md
index a81c473e1a1e..981e3e63333b 100644
--- a/doc/admin-api.md
+++ b/doc/admin-api.md
@@ -62,7 +62,7 @@
|remote_addrs|False |Match Rules|The `remote_addr` in the form of a list indicates that multiple different IP addresses are allowed, and match any one of them.|{"127.0.0.1", "192.0.0.0/8", "::1"}|
|methods |False |Match Rules|If empty or without this option, there are no `method` restrictions, and it can be a combination of one or more: `GET`,`POST`,`PUT`,`DELETE`,`PATCH`, `HEAD`,`OPTIONS`,`CONNECT`,`TRACE`.|{"GET", "POST"}|
|priority |False |Match Rules|If different routes contain the same `uri`, determine which route is matched first based on the attribute` priority`. Larger value means higher priority. The default value is 0.|priority = 10|
-|vars |False |Match Rules |A list of one or more `{var, operator, val}` elements, like this: `{{var, operator, val}, {var, operator, val}, ...}`. For example: `{"arg_name", "==", "json"}` means that the current request parameter `name` is `json`. The `var` here is consistent with the internal variable name of Nginx, so you can also use `request_uri`, `host`, etc. For the operator part, the currently supported operators are `==`, `~=`,`>`, `<`, and `~~`. For the `>` and `<` operators, the result is first converted to `number` and then compared. See a list of [supported operators](#available-operators) |{{"arg_name", "==", "json"}, {"arg_age", ">", 18}}|
+|vars |False |Match Rules |A list of one or more `{var, operator, val}` elements, like this: `{{var, operator, val}, {var, operator, val}, ...}}`. For example: `{"arg_name", "==", "json"}` means that the current request parameter `name` is `json`. The `var` here is consistent with the internal variable name of Nginx, so you can also use `request_uri`, `host`, etc. For the operator part, the currently supported operators are `==`, `~=`,`>`, `<`, and `~~`. For the `>` and `<` operators, the result is first converted to `number` and then compared. See a list of [supported operators](#available-operators) |{{"arg_name", "==", "json"}, {"arg_age", ">", 18}}|
|filter_func|False|Match Rules|User-defined filtering function. You can use it to achieve matching requirements for special scenarios. This function accepts an input parameter named `vars` by default, which you can use to get Nginx variables.|function(vars) return vars["arg_name"] == "json" end|
|plugins |False |Plugin|See [Plugin](architecture-design.md#plugin) for more ||
|upstream |False |Upstream|Enabled Upstream configuration, see [Upstream](architecture-design.md#upstream) for more||
diff --git a/doc/architecture-design.md b/doc/architecture-design.md
index b104440957dc..bda8528b56fd 100644
--- a/doc/architecture-design.md
+++ b/doc/architecture-design.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](architecture-design-cn.md)
+[Chinese](zh-cn/architecture-design.md)
## Table of Contents
@@ -106,7 +106,7 @@ Server: APISIX web server
When we receive a successful response, it indicates that the route was successfully created.
-For specific options of Route, please refer to [Admin API](admin-api-cn.md#route).
+For specific options of Route, please refer to [Admin API](zh-cn/admin-api.md#route).
[Back to top](#Table-of-contents)
@@ -537,7 +537,7 @@ HTTP/1.1 503 Service Temporarily Unavailable
```
-Use the [consumer-restriction](./plugins/consumer-restriction-cn.md) plug-in to restrict the access of Jack to this API.
+Use the [consumer-restriction](zh-cn/plugins/consumer-restriction.md) plug-in to restrict the access of Jack to this API.
# Add Jack to the blacklist
$ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
diff --git a/doc/benchmark.md b/doc/benchmark.md
index eaf4e4cc6cda..9c3c016d0fcf 100644
--- a/doc/benchmark.md
+++ b/doc/benchmark.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](benchmark-cn.md)
+[Chinese](zh-cn/benchmark.md)
### Benchmark Environments
@@ -35,13 +35,13 @@ and the response size was 1KB.
The x-axis means the size of CPU core, and the y-axis is QPS.
-
+
#### Latency
Note the y-axis latency in **microsecond(μs)** not millisecond.
-
+
#### Flame Graph
@@ -80,18 +80,18 @@ and the response size was 1KB.
The x-axis means the size of CPU core, and the y-axis is QPS.
-
+
#### Latency
Note the y-axis latency in **microsecond(μs)** not millisecond.
-
+
#### Flame Graph
The result of Flame Graph:
-
+
And if you want to run the benchmark test in your machine, you should run another Nginx to listen 80 port.
diff --git a/doc/discovery.md b/doc/discovery.md
index f84f29473c4b..96d36e8e3663 100644
--- a/doc/discovery.md
+++ b/doc/discovery.md
@@ -16,7 +16,7 @@
# limitations under the License.
#
-->
-[Chinese](discovery-cn.md)
+[Chinese](zh-cn/discovery.md)
# Integration service discovery registry
diff --git a/doc/getting-started.md b/doc/getting-started.md
index a576329f155a..ae432d464342 100644
--- a/doc/getting-started.md
+++ b/doc/getting-started.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](getting-started-cn.md)
+[Chinese](zh-cn/getting-started.md)
# Quick Start Guide
diff --git a/doc/grpc-proxy.md b/doc/grpc-proxy.md
index 22e3297340f0..50404aef49d8 100644
--- a/doc/grpc-proxy.md
+++ b/doc/grpc-proxy.md
@@ -17,7 +17,7 @@
#
-->
-[中文](grpc-proxy-cn.md)
+[中文](zh-cn/grpc-proxy.md)
# grpc-proxy
diff --git a/doc/https.md b/doc/https.md
index 5e7aa0edba62..c2091a72db47 100644
--- a/doc/https.md
+++ b/doc/https.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](https-cn.md)
+[Chinese](zh-cn/https.md)
### HTTPS
diff --git a/doc/images/apache.png b/doc/images/apache.png
new file mode 100644
index 000000000000..d0075db9e369
Binary files /dev/null and b/doc/images/apache.png differ
diff --git a/doc/index.html b/doc/index.html
new file mode 100644
index 000000000000..61aaf2e0aad3
--- /dev/null
+++ b/doc/index.html
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+ Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/plugin-develop.md b/doc/plugin-develop.md
index a2c8b8b60f4b..a85c208eb4ca 100644
--- a/doc/plugin-develop.md
+++ b/doc/plugin-develop.md
@@ -16,7 +16,7 @@
# limitations under the License.
#
-->
-[中文](plugin-develop-cn.md)
+[中文](zh-cn/plugin-develop.md)
# table of contents
diff --git a/doc/plugins.md b/doc/plugins.md
index 081d2d7385fc..bf39cf15f0a4 100644
--- a/doc/plugins.md
+++ b/doc/plugins.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](plugins-cn.md)
+[Chinese](zh-cn/plugins.md)
## Hot reload
diff --git a/doc/plugins/authz-keycloak.md b/doc/plugins/authz-keycloak.md
index 41dbc27a8136..39a3dcae35a0 100644
--- a/doc/plugins/authz-keycloak.md
+++ b/doc/plugins/authz-keycloak.md
@@ -17,7 +17,7 @@
#
-->
-[中文](authz-keycloak-cn.md)
+[中文](../zh-cn/plugins/authz-keycloak-cn.md)
# Summary
- [**Name**](#name)
diff --git a/doc/plugins/basic-auth.md b/doc/plugins/basic-auth.md
index c564358727a7..dda4cba69352 100644
--- a/doc/plugins/basic-auth.md
+++ b/doc/plugins/basic-auth.md
@@ -17,7 +17,7 @@
#
-->
-# [Chinese](basic-auth-cn.md)
+# [Chinese](../zh-cn/plugins/basic-auth.md)
# Summary
diff --git a/doc/plugins/batch-requests.md b/doc/plugins/batch-requests.md
index b40023b4a045..b3ea993e4cad 100644
--- a/doc/plugins/batch-requests.md
+++ b/doc/plugins/batch-requests.md
@@ -17,7 +17,7 @@
#
-->
-# [Chinese](batch-requests-cn.md)
+# [Chinese](../zh-cn/plugins/batch-requests.md)
# Summary
diff --git a/doc/plugins/consumer-restriction.md b/doc/plugins/consumer-restriction.md
index 2054dbacc60a..60dafa8e8ac3 100644
--- a/doc/plugins/consumer-restriction.md
+++ b/doc/plugins/consumer-restriction.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](consumer-restriction-cn.md)
+[Chinese](../zh-cn/plugins/consumer-restriction.md)
# Summary
- [**Name**](#name)
diff --git a/doc/plugins/cors.md b/doc/plugins/cors.md
index 6e6114ee215c..2cf0f55c897f 100644
--- a/doc/plugins/cors.md
+++ b/doc/plugins/cors.md
@@ -17,7 +17,7 @@
#
-->
-# [Chinese](cors-cn.md)
+# [Chinese](../zh-cn/plugins/cors.md)
# Summary
diff --git a/doc/plugins/fault-injection.md b/doc/plugins/fault-injection.md
index cb895ef62092..7a90b8abcfee 100644
--- a/doc/plugins/fault-injection.md
+++ b/doc/plugins/fault-injection.md
@@ -17,7 +17,7 @@
#
-->
-# [Chinese](fault-injection-cn.md)
+# [Chinese](../zh-cn/plugins/fault-injection.md)
## Name
diff --git a/doc/plugins/grpc-transcode.md b/doc/plugins/grpc-transcode.md
index 39f2f5d5db18..cc9ca4ac3f2a 100644
--- a/doc/plugins/grpc-transcode.md
+++ b/doc/plugins/grpc-transcode.md
@@ -17,7 +17,7 @@
#
-->
-# [Chinese](grpc-transcode-cn.md)
+# [Chinese](../zh-cn/plugins/grpc-transcode.md)
## Name
diff --git a/doc/plugins/ip-restriction.md b/doc/plugins/ip-restriction.md
index 92c735f24d89..68b50f65d413 100644
--- a/doc/plugins/ip-restriction.md
+++ b/doc/plugins/ip-restriction.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](ip-restriction-cn.md)
+[Chinese](../zh-cn/plugins/ip-restriction.md)
# Summary
- [**Name**](#name)
diff --git a/doc/plugins/jwt-auth.md b/doc/plugins/jwt-auth.md
index ed57175159a7..f2e8bfa85556 100644
--- a/doc/plugins/jwt-auth.md
+++ b/doc/plugins/jwt-auth.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](jwt-auth-cn.md)
+[Chinese](../zh-cn/plugins/jwt-auth.md)
# Summary
- [**Name**](#name)
diff --git a/doc/plugins/key-auth.md b/doc/plugins/key-auth.md
index acb02f77bb96..2e28f4865876 100644
--- a/doc/plugins/key-auth.md
+++ b/doc/plugins/key-auth.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](key-auth-cn.md)
+[Chinese](../zh-cn/plugins/key-auth.md)
# Summary
- [**Name**](#name)
diff --git a/doc/plugins/limit-conn.md b/doc/plugins/limit-conn.md
index 2814dc09492d..3fe8a26901f3 100644
--- a/doc/plugins/limit-conn.md
+++ b/doc/plugins/limit-conn.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](limit-conn-cn.md)
+[Chinese](../zh-cn/plugins/limit-conn.md)
# Summary
- [**Name**](#name)
diff --git a/doc/plugins/limit-count.md b/doc/plugins/limit-count.md
index 52da529dbd47..4d03a1d06040 100644
--- a/doc/plugins/limit-count.md
+++ b/doc/plugins/limit-count.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](limit-count-cn.md)
+[Chinese](../zh-cn/plugins/limit-count.md)
# Summary
diff --git a/doc/plugins/limit-req.md b/doc/plugins/limit-req.md
index 9ba84ad6a211..5a5d7c2c26e7 100644
--- a/doc/plugins/limit-req.md
+++ b/doc/plugins/limit-req.md
@@ -17,7 +17,7 @@
#
-->
-# [Chinese](limit-req-cn.md)
+# [Chinese](../zh-cn/plugins/limit-req.md)
# Summary
diff --git a/doc/plugins/mqtt-proxy.md b/doc/plugins/mqtt-proxy.md
index 83ff9f9cc863..49900b7dfe01 100644
--- a/doc/plugins/mqtt-proxy.md
+++ b/doc/plugins/mqtt-proxy.md
@@ -17,7 +17,7 @@
#
-->
-[中文](mqtt-proxy-cn.md)
+[中文](../zh-cn/plugins/mqtt-proxy.md)
# Summary
- [**Name**](#name)
diff --git a/doc/plugins/prometheus.md b/doc/plugins/prometheus.md
index 1b57a97cef3f..3f882f7107a5 100644
--- a/doc/plugins/prometheus.md
+++ b/doc/plugins/prometheus.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](prometheus-cn.md)
+[Chinese](../zh-cn/plugins/prometheus.md)
# prometheus
This plugin exposes metrics in Prometheus Exposition format.
diff --git a/doc/plugins/proxy-cache.md b/doc/plugins/proxy-cache.md
index 618995ebbff8..61931a3d0ad8 100644
--- a/doc/plugins/proxy-cache.md
+++ b/doc/plugins/proxy-cache.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](proxy-cache-cn.md)
+[Chinese](/doc/zh-cn/plugins/proxy-cache.md)
# proxy-cache
diff --git a/doc/plugins/proxy-mirror.md b/doc/plugins/proxy-mirror.md
index 7f5655451af3..c209d73d65ab 100644
--- a/doc/plugins/proxy-mirror.md
+++ b/doc/plugins/proxy-mirror.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](proxy-mirror-cn.md)
+[Chinese](../zh-cn/plugins/proxy-mirror.md)
# proxy-mirror
diff --git a/doc/plugins/proxy-rewrite.md b/doc/plugins/proxy-rewrite.md
index fa73438671f1..6221c5a9761e 100644
--- a/doc/plugins/proxy-rewrite.md
+++ b/doc/plugins/proxy-rewrite.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](proxy-rewrite-cn.md)
+[Chinese](../zh-cn/plugins/proxy-rewrite.md)
# Summary
- [**Name**](#name)
diff --git a/doc/plugins/redirect.md b/doc/plugins/redirect.md
index 6c7da6fbb7b3..b288c37935d7 100644
--- a/doc/plugins/redirect.md
+++ b/doc/plugins/redirect.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](redirect-cn.md)
+[Chinese](../zh-cn/plugins/redirect.md)
# Summary
- [**Name**](#name)
diff --git a/doc/plugins/response-rewrite.md b/doc/plugins/response-rewrite.md
index cd676a53271b..f1c8576ce364 100644
--- a/doc/plugins/response-rewrite.md
+++ b/doc/plugins/response-rewrite.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](response-rewrite-cn.md)
+[Chinese](../zh-cn/plugins/response-rewrite.md)
# Summary
diff --git a/doc/plugins/serverless.md b/doc/plugins/serverless.md
index bb6a30fb35f0..d2e370e399c5 100644
--- a/doc/plugins/serverless.md
+++ b/doc/plugins/serverless.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](serverless-cn.md)
+[Chinese](../zh-cn/plugins/serverless.md)
# Summary
diff --git a/doc/plugins/skywalking.md b/doc/plugins/skywalking.md
index 63f0228fe355..1eefe7c86707 100644
--- a/doc/plugins/skywalking.md
+++ b/doc/plugins/skywalking.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](skywalking-cn.md)
+[Chinese](../zh-cn/plugins/skywalking.md)
# Summary
- [**Summary**](#Summary)
diff --git a/doc/plugins/wolf-rbac.md b/doc/plugins/wolf-rbac.md
index 6e94ee68486f..c8a5de3a605b 100644
--- a/doc/plugins/wolf-rbac.md
+++ b/doc/plugins/wolf-rbac.md
@@ -17,7 +17,7 @@
#
-->
-[中文](wolf-rbac-cn.md)
+[中文](../zh-cn/plugins/wolf-rbac.md)
# Summary
diff --git a/doc/plugins/zipkin.md b/doc/plugins/zipkin.md
index 217f3c6fb060..ec8008707fe2 100644
--- a/doc/plugins/zipkin.md
+++ b/doc/plugins/zipkin.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](zipkin-cn.md)
+[Chinese](../zh-cn/plugins/zipkin.md)
# Summary
- [**Name**](#name)
diff --git a/doc/stand-alone.md b/doc/stand-alone.md
index 2093ae4744e7..b88d81aa3ee5 100644
--- a/doc/stand-alone.md
+++ b/doc/stand-alone.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](stand-alone-cn.md)
+[Chinese](zh-cn/stand-alone.md)
## Stand-alone mode
diff --git a/doc/stream-proxy.md b/doc/stream-proxy.md
index 7956be7496c2..606b92786b96 100644
--- a/doc/stream-proxy.md
+++ b/doc/stream-proxy.md
@@ -17,7 +17,7 @@
#
-->
-[Chinese](stream-proxy-cn.md)
+[Chinese](zh-cn/stream-proxy.md)
# Stream Proxy
diff --git a/doc/zh-cn/README.md b/doc/zh-cn/README.md
new file mode 100644
index 000000000000..2d9965cb33fa
--- /dev/null
+++ b/doc/zh-cn/README.md
@@ -0,0 +1,69 @@
+
+[English](../README.md)
+
+Reference document
+==================
+
+* [APISIX 说明](../../README_CN.md)
+* [架构设计](architecture-design.md)
+* [压力测试](benchmark.md)
+* [如何构建 Apache APISIX](how-to-build.md)
+* [健康检查](health-check.md): 支持对上游节点的主动和被动健康检查,在负载均衡时自动过滤掉不健康的节点。
+* Router(路由)
+ * [radixtree](../router-radixtree.md)
+ * [r3](router-r3.md)
+* [独立运行模型](stand-alone.md): 支持从本地 yaml 格式的配置文件启动,更适合 Kubernetes(k8s) 体系。
+* [TCP/UDP 动态代理](stream-proxy.md)
+* [管理 API](admin-api.md)
+* [变更日志](../../CHANGELOG_CN.md)
+* [代码风格](../CODE_STYLE.md)
+* [常见问答](../../FAQ_CN.md)
+
+插件
+===
+
+* [插件热加载](plugins.md):无需重启服务,完成插件热加载或卸载。
+* [HTTPS](https.md):根据 TLS 扩展字段 SNI(Server Name Indication) 动态加载证书。
+* [动态负载均衡](architecture-design.md#upstream):跨多个上游服务的动态负载均衡,目前已支持 round-robin 和一致性哈希算法。
+* [key-auth](plugins/key-auth.md):基于 Key Authentication 的用户认证。
+* [JWT-auth](plugins/jwt-auth.md):基于 [JWT](https://jwt.io/) (JSON Web Tokens) Authentication 的用户认证。
+* [basic-auth](plugins/basic-auth.md):基于 basic auth 的用户认证。
+* [wolf-rbac](plugins/wolf-rbac.md) 基于 *RBAC* 的用户认证及授权。
+* [limit-count](plugins/limit-count.md):基于“固定窗口”的限速实现。
+* [limit-req](plugins/limit-req.md):基于漏桶原理的请求限速实现。
+* [limit-conn](plugins/limit-conn.md):限制并发请求(或并发连接)。
+* [proxy-rewrite](plugins/proxy-rewrite.md): 支持自定义修改 proxy 到上游的信息。
+* [prometheus](plugins/prometheus.md):以 Prometheus 格式导出 APISIX 自身的状态信息,方便被外部 Prometheus 服务抓取。
+* [OpenTracing](plugins/zipkin.md):支持 Zikpin 和 Apache SkyWalking。
+* [grpc-transcode](plugins/grpc-transcode.md):REST <--> gRPC 转码。
+* [serverless](plugins/serverless.md):允许在 APISIX 中的不同阶段动态运行 Lua 代码。
+* [ip-restriction](plugins/ip-restriction.md): IP 黑白名单。
+* [openid-connect](plugins/oauth.md)
+* [redirect](plugins/redirect.md): URI 重定向。
+* [response-rewrite](plugins/response-rewrite.md): 支持自定义修改返回内容的 `status code`、`body`、`headers`。
+* [fault-injection](plugins/fault-injection.md):故障注入,可以返回指定的响应体、响应码和响应时间,从而提供了不同的失败场景下处理的能力,例如服务失败、服务过载、服务高延时等。
+* [proxy-cache](plugins/proxy-cache.md):代理缓存插件提供缓存后端响应数据的能力。
+* [proxy-mirror](plugins/proxy-mirror.md):代理镜像插件提供镜像客户端请求的能力。
+* [udp-logger](plugins/udp-logger.md): 将请求记录到UDP服务器
+* [tcp-logger](plugins/tcp-logger.md): 将请求记录到TCP服务器
+* [kafka-logger](plugins/kafka-logger.md): 将请求记录到外部Kafka服务器。
+* [cors](plugins/cors.md): 为你的API启用 CORS
+* [batch-requests](plugins/batch-requests.md): 以 **http pipeline** 的方式在网关一次性发起多个 `http` 请求。
+* [authz-keycloak](plugins/authz-keycloak-cn.md): 支持 Keycloak 身份认证服务器
diff --git a/doc/zh-cn/_sidebar.md b/doc/zh-cn/_sidebar.md
new file mode 100644
index 000000000000..95504b63e965
--- /dev/null
+++ b/doc/zh-cn/_sidebar.md
@@ -0,0 +1,103 @@
+
+
+- Getting started
+
+ - [Introduction](./zh-cn/README.md)
+ - [Quick start](./zh-cn/getting-started.md)
+
+- General
+
+ - [Architecture](./zh-cn/architecture-design.md)
+
+ - [Benchmark](./zh-cn/benchmark.md)
+
+ - Installation
+
+ - [How to build](./zh-cn/how-to-build.md)
+ - [Install Dependencies](./zh-cn/install-dependencies.md)
+
+ - [HTTPS](./zh-cn/https.md)
+
+ - [Router](./zh-cn/router-radixtree.md)
+
+ - Plugins
+
+ - [Develop Plugins](./zh-cn/plugin-develop.md)
+ - [Hot Reload](./zh-cn/plugins.md)
+
+ - Proxy Modes
+
+ - [GRPC Proxy](./zh-cn/grpc-proxy.md)
+ - [Stream Proxy](./zh-cn/stream-proxy.md)
+
+- Plugins
+
+ - Authentication
+
+ - [Key Auth](./zh-cn/plugins/key-auth.md)
+ - [Basic Auth](./zh-cn/plugins/basic-auth.md)
+ - [JWT Auth](./zh-cn/plugins/jwt-auth.md)
+ - [Opend ID Connect](./zh-cn/plugins/oauth.md)
+
+ - General
+
+ - [Redirect](./zh-cn/plugins/redirect.md)
+ - [Serverless](./zh-cn/plugins/serverless.md)
+ - [Batch Request](./zh-cn/plugins/batch-requests.md)
+ - [Fault Injection](./zh-cn/plugins/fault-injection.md)
+ - [MQTT Proxy](./zh-cn/plugins/mqtt-proxy.md)
+ - [Proxy Cache](./zh-cn/plugins/proxy-cache.md)
+ - [Proxy Mirror](./zh-cn/plugins/proxy-mirror.md)
+ - [Echo](./zh-cn/plugins/echo.md)
+
+ - Transformations
+
+ - [Response Rewrite](./zh-cn/plugins/response-rewrite.md)
+ - [Proxy Rewrite](./zh-cn/plugins/proxy-rewrite.md)
+ - [GRPC Transcoding](./zh-cn/plugins/grpc-transcode.md)
+
+ - Security
+
+ - [Consumer Restriction](./zh-cn/plugins/consumer-restriction.md)
+ - [Limit Connection](./zh-cn/plugins/limit-conn.md)
+ - [Limit Count](./zh-cn/plugins/limit-count.md)
+ - [Limit Request](./zh-cn/plugins/limit-req.md)
+ - [CORS](./zh-cn/plugins/cors.md)
+ - [IP Restriction](./zh-cn/plugins/ip-restriction.md)
+ - [Keycloak Authorization](./zh-cn/plugins/authz-keycloak.md)
+ - [RBAC Wolf](./zh-cn/plugins/wolf-rbac.md)
+
+ - Monitoring
+
+ - [Prometheus](./zh-cn/plugins/prometheus.md)
+ - [SKywalking](./zh-cn/plugins/skywalking.md)
+ - [Zipkin](./zh-cn/plugins/zipkin.md)
+
+ - Loggers
+
+ - [HTTP Logger](./zh-cn/plugins/http-logger.md)
+ - [Kafka Logger](./zh-cn/plugins/kafka-logger.md)
+ - [Syslog](./zh-cn/plugins/syslog.md)
+ - [TCP Logger](./zh-cn/plugins/tcp-logger.md)
+ - [UDP Logger](./zh-cn/plugins/udp-logger.md)
+
+- Admin API
+
+ - [Admin API](./zh-cn/admin-api.md)
diff --git a/doc/admin-api-cn.md b/doc/zh-cn/admin-api.md
similarity index 94%
rename from doc/admin-api-cn.md
rename to doc/zh-cn/admin-api.md
index 0e80d0e07c96..e32882084c4e 100644
--- a/doc/admin-api-cn.md
+++ b/doc/zh-cn/admin-api.md
@@ -52,12 +52,12 @@
|名字 |可选项 |类型 |说明 |示例|
|---------|---------|----|-----------|----|
-|uri |与 `uris` 二选一 |匹配规则|除了如 `/foo/bar`、`/foo/gloo` 这种全量匹配外,使用不同 [Router](architecture-design-cn.md#router) 还允许更高级匹配,更多见 [Router](architecture-design-cn.md#router)。|"/hello"|
+|uri |与 `uris` 二选一 |匹配规则|除了如 `/foo/bar`、`/foo/gloo` 这种全量匹配外,使用不同 [Router](architecture-design.md#router) 还允许更高级匹配,更多见 [Router](architecture-design.md#router)。|"/hello"|
|uris |与 `uri` 二选一 |匹配规则|数组形式,可以匹配多个 `uri`|["/hello", "/world"]|
-|plugins |`plugins`、`upstream`/`upstream_id`、`service_id`至少选择一个 |Plugin|详见 [Plugin](architecture-design-cn.md#plugin) ||
-|upstream |`plugins`、`upstream`/`upstream_id`、`service_id`至少选择一个 |Upstream|启用的 Upstream 配置,详见 [Upstream](architecture-design-cn.md#upstream)||
-|upstream_id|`plugins`、`upstream`/`upstream_id`、`service_id`至少选择一个 |Upstream|启用的 upstream id,详见 [Upstream](architecture-design-cn.md#upstream)||
-|service_id|`plugins`、`upstream`/`upstream_id`、`service_id`至少选择一个 |Service|绑定的 Service 配置,详见 [Service](architecture-design-cn.md#service)||
+|plugins |`plugins`、`upstream`/`upstream_id`、`service_id`至少选择一个 |Plugin|详见 [Plugin](architecture-design.md#plugin) ||
+|upstream |`plugins`、`upstream`/`upstream_id`、`service_id`至少选择一个 |Upstream|启用的 Upstream 配置,详见 [Upstream](architecture-design.md#upstream)||
+|upstream_id|`plugins`、`upstream`/`upstream_id`、`service_id`至少选择一个 |Upstream|启用的 upstream id,详见 [Upstream](architecture-design.md#upstream)||
+|service_id|`plugins`、`upstream`/`upstream_id`、`service_id`至少选择一个 |Service|绑定的 Service 配置,详见 [Service](architecture-design.md#service)||
|service_protocol|可选|上游协议类型|只可以是 "grpc", "http" 二选一。|默认 "http",使用gRPC proxy 或gRPC transcode 时,必须用"grpc"|
|name |可选 |辅助 |标识路由名称|route-xxxx|
|desc |可选 |辅助 |标识描述、使用场景等。|客户 xxxx|
@@ -67,7 +67,7 @@
|remote_addrs|可选 |匹配规则|列表形态的 `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"}|
|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` 等;对于 `operator` 部分,目前已支持的运算符有 `==`、`~=`、`>`、`<` 和 `~~`。对于`>`和`<`两个运算符,会把结果先转换成 number 然后再做比较。查看支持的[运算符列表](#运算符列表)|{{"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` 等;对于 `operator` 部分,目前已支持的运算符有 `==`、`~=`、`>`、`<` 和 `~~`。对于`>`和`<`两个运算符,会把结果先转换成 number 然后再做比较。查看支持的[运算符列表](#运算符列表)|{{"arg_name", "==", "json"}, {"arg_age", ">", 18}}|
|filter_func|可选|匹配规则|用户自定义的过滤函数。可以使用它来实现特殊场景的匹配要求实现。该函数默认接受一个名为 vars 的输入参数,可以用它来获取 Nginx 变量。|function(vars) return vars["arg_name"] == "json" end|
有两点需要特别注意:
@@ -195,9 +195,9 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
|名字 |可选项 |类型 |说明 |示例|
|---------|---------|----|-----------|----|
-|plugins |可选 |Plugin|详见 [Plugin](architecture-design-cn.md#plugin) ||
-|upstream | upstream 或 upstream_id 两个选一个 |Upstream|启用的 Upstream 配置,详见 [Upstream](architecture-design-cn.md#upstream)||
-|upstream_id| upstream 或 upstream_id 两个选一个 |Upstream|启用的 upstream id,详见 [Upstream](architecture-design-cn.md#upstream)||
+|plugins |可选 |Plugin|详见 [Plugin](architecture-design.md#plugin) ||
+|upstream | upstream 或 upstream_id 两个选一个 |Upstream|启用的 Upstream 配置,详见 [Upstream](architecture-design.md#upstream)||
+|upstream_id| upstream 或 upstream_id 两个选一个 |Upstream|启用的 upstream id,详见 [Upstream](architecture-design.md#upstream)||
|name |可选 |辅助 |标识服务名称。||
|desc |可选 |辅助 |服务描述、使用场景等。||
@@ -352,7 +352,7 @@ APISIX 的 Upstream 除了基本的复杂均衡算法选择外,还支持对上
|k8s_deployment_info|与 `nodes` 二选一|哈希表|字段包括 `namespace`、`deploy_name`、`service_name`、`port`、`backend_type`,其中 `port` 字段为数值,`backend_type` 为 `pod` 或 `service`,其他为字符串 | `{"namespace": "test-namespace", "deploy_name": "test-deploy-name", "service_name": "test-service-name", "backend_type": "pod", "port": 8080}` |
|type |必需|枚举|`roundrobin` 支持权重的负载,`chash` 一致性哈希,两者是二选一的|`roundrobin`||
|key |条件必需|匹配类型|该选项只有类型是 `chash` 才有效。根据 `key` 来查找对应的 node `id`,相同的 `key` 在同一个对象中,永远返回相同 id,目前支持的 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)||
-|checks |可选|health_checker|配置健康检查的参数,详细可参考[health-check](health-check.md)||
+|checks |可选|health_checker|配置健康检查的参数,详细可参考[health-check](../health-check.md)||
|retries |可选|整型|使用底层的 Nginx 重试机制将请求传递给下一个上游,默认不启用重试机制||
|timeout |可选|超时时间对象|设置连接、发送消息、接收消息的超时时间||
|enable_websocket |可选 |辅助|是否允许启用 websocket 能力||
diff --git a/doc/architecture-design-cn.md b/doc/zh-cn/architecture-design.md
similarity index 96%
rename from doc/architecture-design-cn.md
rename to doc/zh-cn/architecture-design.md
index b6bd0a94bdcd..b91cfedc2c9c 100644
--- a/doc/architecture-design-cn.md
+++ b/doc/zh-cn/architecture-design.md
@@ -34,7 +34,7 @@
### 插件加载流程
-
+
### 插件内部结构
@@ -105,7 +105,7 @@ Server: APISIX web server
当我们接收到成功应答,表示该 Route 已成功创建。
-有关 Route 的具体选项,可具体查阅 [Admin API 之 Route](admin-api-cn.md#route)。
+有关 Route 的具体选项,可具体查阅 [Admin API 之 Route](admin-api.md#route)。
[返回目录](#目录)
@@ -193,7 +193,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/102 -H 'X-API-KEY: edd1c9f034335f
优先级更高。
一个插件在一次请求中只会执行一次,即使被同时绑定到多个不同对象中(比如 Route 或 Service)。
-插件运行先后顺序是根据插件自身的优先级来决定的,例如:[example-plugin](../apisix/plugins/example-plugin.lua#L37)。
+插件运行先后顺序是根据插件自身的优先级来决定的,例如:[example-plugin](../../apisix/plugins/example-plugin.lua#L37)。
插件配置作为 Route 或 Service 的一部分提交的,放到 `plugins` 下。它内部是使用插件
名字作为哈希的 key 来保存不同插件的配置项。
@@ -216,7 +216,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/102 -H 'X-API-KEY: edd1c9f034335f
并不是所有插件都有具体配置项,比如 `prometheus` 下是没有任何具体配置项,这时候用一个空的对象
标识即可。
-[查看 APISIX 已支持插件列表](plugins-cn.md)
+[查看 APISIX 已支持插件列表](plugins.md)
[返回目录](#目录)
@@ -239,11 +239,11 @@ APISIX 的 Upstream 除了基本的复杂均衡算法选择外,还支持对上
|------- |-----|------|
|type |必填|`roundrobin` 支持权重的负载,`chash` 一致性哈希,两者是二选一的|
|nodes |与 `k8s_deployment_info`、 `service_name` 三选一|哈希表,内部元素的 key 是上游机器地址列表,格式为`地址 + Port`,其中地址部分可以是 IP 也可以是域名,比如 `192.168.1.100:80`、`foo.com:80` 等。value 则是节点的权重。当权重值为 `0` 代表该上游节点失效,不会被选中,可以用于暂时摘除节点的情况。|
-|service_name |与 `nodes`、 `k8s_deployment_info` 三选一 |用于设置上游服务名,并配合注册中心使用,详细可参考[集成服务发现注册中心](discovery-cn.md) |
+|service_name |与 `nodes`、 `k8s_deployment_info` 三选一 |用于设置上游服务名,并配合注册中心使用,详细可参考[集成服务发现注册中心](discovery.md) |
|k8s_deployment_info|与 `nodes`、 `service_name` 三选一|哈希表|字段包括 `namespace`、`deploy_name`、`service_name`、`port`、`backend_type`,其中 `port` 字段为数值,`backend_type` 为 `pod` 或 `service`,其他为字符串 |
|key |可选|在 `type` 等于 `chash` 是必选项。 `key` 需要配合 `hash_on` 来使用,通过 `hash_on` 和 `key` 来查找对应的 node `id`|
|hash_on |可选|`hash_on` 支持的类型有 `vars`(Nginx内置变量),`header`(自定义header),`cookie`,`consumer`,默认值为 `vars`|
-|checks |可选|配置健康检查的参数,详细可参考[health-check](health-check.md)|
+|checks |可选|配置健康检查的参数,详细可参考[health-check](../health-check.md)|
|retries |可选|使用底层的 Nginx 重试机制将请求传递给下一个上游,默认 APISIX 会启用重试机制,根据配置的后端节点个数设置重试次数,如果此参数显式被设置将会覆盖系统默认设置的重试次数。|
|enable_websocket|可选| 是否启用 `websocket`(布尔值),默认不启用|
@@ -353,7 +353,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
}'
```
-更多细节可以参考[健康检查的文档](health-check.md)。
+更多细节可以参考[健康检查的文档](../health-check.md)。
下面是几个使用不同`hash_on`类型的配置示例:
@@ -460,7 +460,7 @@ APISIX 区别于其他 API 网关的一大特点是允许用户选择不同 Rout
在本地配置 `conf/config.yaml` 中设置最符合自身业务需求的路由。
* `apisix.router.http`: HTTP 请求路由。
- * `radixtree_uri`: (默认)只使用 `uri` 作为主索引。基于 `radixtree` 引擎,支持全量和深前缀匹配,更多见 [如何使用 router-radixtree](router-radixtree.md)。
+ * `radixtree_uri`: (默认)只使用 `uri` 作为主索引。基于 `radixtree` 引擎,支持全量和深前缀匹配,更多见 [如何使用 router-radixtree](../router-radixtree.md)。
* `绝对匹配`:完整匹配给定的 `uri` ,比如 `/foo/bar`,`/foo/glo`。
* `前缀匹配`:末尾使用 `*` 代表给定的 `uri` 是前缀匹配。比如 `/foo*`,则允许匹配 `/foo/`、`/foo/a`和`/foo/b`等。
* `匹配优先级`:优先尝试绝对匹配,若无法命中绝对匹配,再尝试前缀匹配。
@@ -490,14 +490,14 @@ APISIX 区别于其他 API 网关的一大特点是允许用户选择不同 Rout
-1. 授权认证:比如有 [key-auth](./plugins/key-auth.md)、[JWT](./plugins/jwt-auth-cn.md) 等。
+1. 授权认证:比如有 [key-auth](../plugins/key-auth.md)、[JWT](plugins/jwt-auth.md) 等。
2. 获取 consumer_id:通过授权认证,即可自然获取到对应的 Consumer `id`,它是 Consumer 对象的唯一识别标识。
3. 获取 Consumer 上绑定的 Plugin 或 Upstream 信息:完成对不同 Consumer 做不同配置的效果。
概括一下,Consumer 是某类服务的消费者,需与用户认证体系配合才能使用。
比如不同的 Consumer 请求同一个 API,网关服务根据当前请求用户信息,对应不同的 Plugin 或 Upstream 配置。
-此外,大家也可以参考 [key-auth](./plugins/key-auth.md) 认证授权插件的调用逻辑,辅助大家来进一步理解 Consumer 概念和使用。
+此外,大家也可以参考 [key-auth](../plugins/key-auth.md) 认证授权插件的调用逻辑,辅助大家来进一步理解 Consumer 概念和使用。
如何对某个 Consumer 开启指定插件,可以看下面例子:
@@ -548,7 +548,7 @@ HTTP/1.1 503 Service Temporarily Unavailable
```
-结合 [consumer-restriction](./plugins/consumer-restriction-cn.md) 插件,限制jack对该 route 的访问
+结合 [consumer-restriction](plugins/consumer-restriction.md) 插件,限制jack对该 route 的访问
# 设置黑名单,禁止jack访问该API
$ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
diff --git a/doc/batch-processor-cn.md b/doc/zh-cn/batch-processor.md
similarity index 98%
rename from doc/batch-processor-cn.md
rename to doc/zh-cn/batch-processor.md
index 92ecb7783df1..e9cfe2816bbb 100644
--- a/doc/batch-processor-cn.md
+++ b/doc/zh-cn/batch-processor.md
@@ -17,7 +17,7 @@
#
-->
-[English](batch-processor.md)
+[English](../batch-processor.md)
# 批处理机
diff --git a/doc/benchmark-cn.md b/doc/zh-cn/benchmark.md
similarity index 96%
rename from doc/benchmark-cn.md
rename to doc/zh-cn/benchmark.md
index b42cf90f4763..5e1dd4c80b65 100644
--- a/doc/benchmark-cn.md
+++ b/doc/zh-cn/benchmark.md
@@ -17,7 +17,7 @@
#
-->
-[English](benchmark.md)
+[English](../benchmark.md)
### 测试环境
@@ -66,4 +66,4 @@
#### 火焰图
火焰图的采样结果:
-
+
diff --git a/doc/discovery-cn.md b/doc/zh-cn/discovery.md
similarity index 99%
rename from doc/discovery-cn.md
rename to doc/zh-cn/discovery.md
index b748921468d8..003cc287be8d 100644
--- a/doc/discovery-cn.md
+++ b/doc/zh-cn/discovery.md
@@ -16,7 +16,7 @@
# limitations under the License.
#
-->
-[English](discovery.md)
+[English](../discovery.md)
# 集成服务发现注册中心
@@ -35,7 +35,7 @@
当业务量发生变化时,需要对上游服务进行扩缩容,或者因服务器硬件故障需要更换服务器。如果网关是通过配置来维护上游服务信息,在微服务架构模式下,其带来的维护成本可想而知。再者因不能及时更新这些信息,也会对业务带来一定的影响,还有人为误操作带来的影响也不可忽视,所以网关非常必要通过服务注册中心动态获取最新的服务实例信息。架构图如下所示:
-
+
1. 服务启动时将自身的一些信息,比如服务名、IP、端口等信息上报到注册中心;各个服务与注册中心使用一定机制(例如心跳)通信,如果注册中心与服务长时间无法通信,就会注销该实例;当服务下线时,会删除注册中心的实例信息;
2. 网关会准实时地从注册中心获取服务实例信息;
@@ -58,7 +58,7 @@ APISIX 要扩展注册中心其实是件非常容易的事情,其基本步骤
#### 实现 eureka.lua
-首先在 `apisix/discovery/` 目录中添加 [`eureka.lua`](../apisix/discovery/eureka.lua);
+首先在 `apisix/discovery/` 目录中添加 [`eureka.lua`](../../apisix/discovery/eureka.lua);
然后在 `eureka.lua` 实现用于初始化的 `init_worker` 函数以及用于获取服务实例节点列表的 `nodes` 函数即可:
diff --git a/doc/getting-started-cn.md b/doc/zh-cn/getting-started.md
similarity index 97%
rename from doc/getting-started-cn.md
rename to doc/zh-cn/getting-started.md
index 8825279b030b..556533d42c68 100644
--- a/doc/getting-started-cn.md
+++ b/doc/zh-cn/getting-started.md
@@ -16,7 +16,7 @@
# limitations under the License.
#
-->
-[English](getting-started.md)
+[English](../getting-started.md)
# 快速入门指南
@@ -38,12 +38,12 @@ $ curl --location --request GET "https://httpbin.org/get?foo1=bar1&foo2=bar2"
## 前提
-- 本指南使用 docker 和 docker compose 来安装 Apache APISIX。 但是, 如果您已经以其他方式安装了 Apache APISIX ,您只需跳到 [第二步](getting-started-cn.md#第二步:-在-APISIX-中设置路由) 。
+- 本指南使用 docker 和 docker compose 来安装 Apache APISIX。 但是, 如果您已经以其他方式安装了 Apache APISIX ,您只需跳到 [第二步](getting-started.md#第二步:-在-APISIX-中设置路由) 。
- Curl:指南使用 Curl 命令进行 API 测试,但是您也可以使用您选择的任何其他工具( 例如 Postman )。
## 第一步: 安装 APISIX
-Apache APISIX 可以多种操作环境中安装。[如何安装文档](how-to-build-cn.md#installation-via-source-release) 显示了多个平台中的安装步骤。
+Apache APISIX 可以多种操作环境中安装。[如何安装文档](how-to-build.md#installation-via-source-release) 显示了多个平台中的安装步骤。
为了快速入门,让我们基于 docker 容器的安装方式进行安装。启动 Apache APISIX 服务,我们可以参照这个镜像文件[repository](https://github.com/apache/incubator-apisix-docker) 并切换到 example 文件夹下执行如下命令。
如下命令会启动 Apache APISIX 服务并默认在 9080 端口( https 请求是 9443 端口) 提供 admin API 接口服务
@@ -240,7 +240,7 @@ curl -i -X GET http://127.0.0.1:9080/samplePrefix/get?param1=foo¶m2=bar -H '
到目前为止,已经通过使用 admin API 接口编排对 Apache APISIX 的 API 的调用。然而,Apache APISIX 还提供执行类似操作的一个 web 应用,就是web控制台。
可以在[repository](https://github.com/apache/incubator-apisix)中使用。控制台是直观的,您可以通过它编排同样的路由配置。
-
+
### 故障排查
diff --git a/doc/grpc-proxy-cn.md b/doc/zh-cn/grpc-proxy.md
similarity index 96%
rename from doc/grpc-proxy-cn.md
rename to doc/zh-cn/grpc-proxy.md
index 8c5a4e625a05..3f76fd8bec65 100644
--- a/doc/grpc-proxy-cn.md
+++ b/doc/zh-cn/grpc-proxy.md
@@ -17,7 +17,7 @@
#
-->
-[English](grpc-proxy.md)
+[English](../grpc-proxy.md)
# grpc-proxy
@@ -35,7 +35,7 @@
在指定 Route 中,代理 gRPC 服务接口:
* 注意: 这个 Route 的属性 `service_protocol` 必须设置为 `grpc`;
-* 注意: APISIX 使用 TLS 加密的 HTTP/2 暴露 gRPC 服务, 所以需要先 [配置 SSL 证书](https-cn.md);
+* 注意: APISIX 使用 TLS 加密的 HTTP/2 暴露 gRPC 服务, 所以需要先 [配置 SSL 证书](https.md);
* 下面例子所代理的 gRPC 服务可供参考:[grpc_server_example](https://github.com/iresty/grpc_server_example)。
```shell
diff --git a/doc/health-check-cn.md b/doc/zh-cn/health-check.md
similarity index 99%
rename from doc/health-check-cn.md
rename to doc/zh-cn/health-check.md
index 266dae6fb53e..6be4691c98b3 100644
--- a/doc/health-check-cn.md
+++ b/doc/zh-cn/health-check.md
@@ -17,7 +17,7 @@
#
-->
-# [English](health-check.md)
+# [English](../health-check.md)
## Upstream的健康检查
diff --git a/doc/how-to-build-cn.md b/doc/zh-cn/how-to-build.md
similarity index 99%
rename from doc/how-to-build-cn.md
rename to doc/zh-cn/how-to-build.md
index b838883302b0..708cadac4f40 100644
--- a/doc/how-to-build-cn.md
+++ b/doc/zh-cn/how-to-build.md
@@ -23,7 +23,7 @@
Apache APISIX 的运行环境需要 Nginx 和 etcd,
-所以在安装前,请根据不同的操作系统来[安装依赖](install-dependencies-cn.md)。
+所以在安装前,请根据不同的操作系统来[安装依赖](install-dependencies.md)。
## 2. 安装 Apache APISIX
diff --git a/doc/https-cn.md b/doc/zh-cn/https.md
similarity index 99%
rename from doc/https-cn.md
rename to doc/zh-cn/https.md
index 4ea82d5f21fb..33ce14c22137 100644
--- a/doc/https-cn.md
+++ b/doc/zh-cn/https.md
@@ -17,7 +17,7 @@
#
-->
-[English](https.md)
+[English](../https.md)
### HTTPS
diff --git a/doc/install-dependencies-cn.md b/doc/zh-cn/install-dependencies.md
similarity index 98%
rename from doc/install-dependencies-cn.md
rename to doc/zh-cn/install-dependencies.md
index 1ada388b756e..fed9c1d1e6f2 100644
--- a/doc/install-dependencies-cn.md
+++ b/doc/zh-cn/install-dependencies.md
@@ -134,4 +134,4 @@ http://openresty.org/en/linux-packages.html
====
- Apache APISIX 目前只支持 `v2` 版本的 etcd,但是最新版的 etcd (从 3.4 起)已经默认关闭了 `v2` 版本的功能。所以你需要添加启动参数 `--enable-v2=true` 来开启 `v2` 的功能,目前对 `v3` etcd 的开发工作已经启动,不久后便可投入使用。
-- 如果你要想使用 Tengine 替代 OpenResty,请参考 [Install Tengine at Ubuntu](../.travis/linux_tengine_runner.sh)。
+- 如果你要想使用 Tengine 替代 OpenResty,请参考 [Install Tengine at Ubuntu](../../.travis/linux_tengine_runner.sh)。
diff --git a/doc/plugin-develop-cn.md b/doc/zh-cn/plugin-develop.md
similarity index 99%
rename from doc/plugin-develop-cn.md
rename to doc/zh-cn/plugin-develop.md
index 1494d525a668..85083ddf1e25 100644
--- a/doc/plugin-develop-cn.md
+++ b/doc/zh-cn/plugin-develop.md
@@ -16,7 +16,7 @@
# limitations under the License.
#
-->
-[English](plugin-develop.md)
+[English](../plugin-develop.md)
# 目录
diff --git a/doc/plugins-cn.md b/doc/zh-cn/plugins.md
similarity index 97%
rename from doc/plugins-cn.md
rename to doc/zh-cn/plugins.md
index 103cfb070810..dc861fb6029e 100644
--- a/doc/plugins-cn.md
+++ b/doc/zh-cn/plugins.md
@@ -17,7 +17,7 @@
#
-->
-[English](plugins.md)
+[English](../plugins.md)
## 热加载
diff --git a/doc/plugins/authz-keycloak-cn.md b/doc/zh-cn/plugins/authz-keycloak-cn.md
similarity index 97%
rename from doc/plugins/authz-keycloak-cn.md
rename to doc/zh-cn/plugins/authz-keycloak-cn.md
index 7a8e881181b2..fe433c8fe6ac 100644
--- a/doc/plugins/authz-keycloak-cn.md
+++ b/doc/zh-cn/plugins/authz-keycloak-cn.md
@@ -17,7 +17,7 @@
#
-->
-[English](authz-keycloak.md)
+[English](../../plugins/authz-keycloak.md)
# 目录
- [**名字**](#名字)
@@ -115,7 +115,7 @@ docker run -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=123456 -p 8090:8080 sshni
下面这张截图显示了如何在 Keycloak 服务器上配置访问策略:
-
+
## 后续开发
diff --git a/doc/plugins/basic-auth-cn.md b/doc/zh-cn/plugins/basic-auth.md
similarity index 96%
rename from doc/plugins/basic-auth-cn.md
rename to doc/zh-cn/plugins/basic-auth.md
index e4e862d1ea83..f4442f0f658b 100644
--- a/doc/plugins/basic-auth-cn.md
+++ b/doc/zh-cn/plugins/basic-auth.md
@@ -17,7 +17,7 @@
#
-->
-# [English](basic-auth.md)
+# [English](../../plugins/basic-auth.md)
# 目录
@@ -58,10 +58,10 @@ curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f1
```
你可以使用浏览器打开 dashboard:`http://127.0.0.1:9080/apisix/dashboard/`,通过 web 界面来完成上面的操作,先增加一个 consumer:
-
+
然后在 consumer 页面中添加 basic-auth 插件:
-
+
### 2. 创建 Route 或 Service 对象,并开启 `basic-auth` 插件。
diff --git a/doc/plugins/batch-requests-cn.md b/doc/zh-cn/plugins/batch-requests.md
similarity index 99%
rename from doc/plugins/batch-requests-cn.md
rename to doc/zh-cn/plugins/batch-requests.md
index fb5d1994c227..bea6bd5ffc7d 100644
--- a/doc/plugins/batch-requests-cn.md
+++ b/doc/zh-cn/plugins/batch-requests.md
@@ -17,7 +17,7 @@
#
-->
-# [English](batch-requests.md)
+# [English](../../plugins/batch-requests.md)
# 目录
diff --git a/doc/plugins/consumer-restriction-cn.md b/doc/zh-cn/plugins/consumer-restriction.md
similarity index 98%
rename from doc/plugins/consumer-restriction-cn.md
rename to doc/zh-cn/plugins/consumer-restriction.md
index 7cea44c99a24..c1f3d1e35966 100644
--- a/doc/plugins/consumer-restriction-cn.md
+++ b/doc/zh-cn/plugins/consumer-restriction.md
@@ -17,7 +17,7 @@
#
-->
-[English](consumer-restriction.md)
+[English](../../plugins/consumer-restriction.md)
# 目录
- [**名字**](#名字)
diff --git a/doc/plugins/cors-cn.md b/doc/zh-cn/plugins/cors.md
similarity index 99%
rename from doc/plugins/cors-cn.md
rename to doc/zh-cn/plugins/cors.md
index 413dc95acc85..bc26df7307cf 100644
--- a/doc/plugins/cors-cn.md
+++ b/doc/zh-cn/plugins/cors.md
@@ -17,7 +17,7 @@
#
-->
-# [English](cors.md)
+# [English](../../plugins/cors.md)
# 目录
diff --git a/doc/plugins/echo-cn.md b/doc/zh-cn/plugins/echo.md
similarity index 100%
rename from doc/plugins/echo-cn.md
rename to doc/zh-cn/plugins/echo.md
diff --git a/doc/plugins/fault-injection-cn.md b/doc/zh-cn/plugins/fault-injection.md
similarity index 98%
rename from doc/plugins/fault-injection-cn.md
rename to doc/zh-cn/plugins/fault-injection.md
index 29453a8115b4..d6155efe1b66 100644
--- a/doc/plugins/fault-injection-cn.md
+++ b/doc/zh-cn/plugins/fault-injection.md
@@ -17,7 +17,7 @@
#
-->
-# [English](fault-injection.md)
+# [English](../../plugins/fault-injection.md)
# fault-injection
diff --git a/doc/plugins/grpc-transcode-cn.md b/doc/zh-cn/plugins/grpc-transcode.md
similarity index 99%
rename from doc/plugins/grpc-transcode-cn.md
rename to doc/zh-cn/plugins/grpc-transcode.md
index fef755d8d82a..b0c74601ffe9 100644
--- a/doc/plugins/grpc-transcode-cn.md
+++ b/doc/zh-cn/plugins/grpc-transcode.md
@@ -17,7 +17,7 @@
#
-->
-# [English](grpc-transcode.md)
+# [English](../../plugins/grpc-transcode.md)
# grpc-transcode
diff --git a/doc/plugins/http-logger-cn.md b/doc/zh-cn/plugins/http-logger.md
similarity index 100%
rename from doc/plugins/http-logger-cn.md
rename to doc/zh-cn/plugins/http-logger.md
diff --git a/doc/plugins/ip-restriction-cn.md b/doc/zh-cn/plugins/ip-restriction.md
similarity index 98%
rename from doc/plugins/ip-restriction-cn.md
rename to doc/zh-cn/plugins/ip-restriction.md
index 87585740a1eb..89ecf5363e55 100644
--- a/doc/plugins/ip-restriction-cn.md
+++ b/doc/zh-cn/plugins/ip-restriction.md
@@ -17,7 +17,7 @@
#
-->
-[English](ip-restriction.md)
+[English](../../plugins/ip-restriction.md)
# 目录
- [**名字**](#名字)
diff --git a/doc/plugins/jwt-auth-cn.md b/doc/zh-cn/plugins/jwt-auth.md
similarity index 97%
rename from doc/plugins/jwt-auth-cn.md
rename to doc/zh-cn/plugins/jwt-auth.md
index 8dfc5cb6b04e..8a33e8eec6e5 100644
--- a/doc/plugins/jwt-auth-cn.md
+++ b/doc/zh-cn/plugins/jwt-auth.md
@@ -17,7 +17,7 @@
#
-->
-[English](jwt-auth.md)
+[English](../../plugins/jwt-auth.md)
# 目录
- [**名字**](#名字)
@@ -59,10 +59,10 @@ curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f1
}'
```
你可以使用浏览器打开 dashboard:`http://127.0.0.1:9080/apisix/dashboard/`,通过 web 界面来完成上面的操作,先增加一个 consumer:
-
+
然后在 consumer 页面中添加 jwt-auth 插件:
-
+
2. 创建 Route 或 Service 对象,并开启 `jwt-auth` 插件。
diff --git a/doc/plugins/kafka-logger-cn.md b/doc/zh-cn/plugins/kafka-logger.md
similarity index 98%
rename from doc/plugins/kafka-logger-cn.md
rename to doc/zh-cn/plugins/kafka-logger.md
index 74b4196f2062..eecded5da01e 100644
--- a/doc/plugins/kafka-logger-cn.md
+++ b/doc/zh-cn/plugins/kafka-logger.md
@@ -32,7 +32,7 @@
它可以将接口请求日志以 JSON 的形式推送给外部 Kafka 集群。如果在短时间内没有收到日志数据,请放心,它会在我们的批处理处理器中的计时器功能到期后自动发送日志。
有关 Apache APISIX 中 Batch-Processor 的更多信息,请参考。
-[Batch-Processor](../batch-processor-cn.md)
+[Batch-Processor](../batch-processor.md)
## 属性
diff --git a/doc/plugins/key-auth-cn.md b/doc/zh-cn/plugins/key-auth.md
similarity index 96%
rename from doc/plugins/key-auth-cn.md
rename to doc/zh-cn/plugins/key-auth.md
index e7b392c69bea..0c2c75c7782e 100644
--- a/doc/plugins/key-auth-cn.md
+++ b/doc/zh-cn/plugins/key-auth.md
@@ -17,7 +17,7 @@
#
-->
-[English](key-auth.md)
+[English](../../plugins/key-auth.md)
# 目录
- [**名字**](#名字)
@@ -54,10 +54,10 @@ curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f1
```
你可以使用浏览器打开 dashboard:`http://127.0.0.1:9080/apisix/dashboard/`,通过 web 界面来完成上面的操作,先增加一个 consumer:
-
+
然后在 consumer 页面中添加 key-auth 插件:
-
+
2. 创建 route 或 service 对象,并开启 `key-auth` 插件。
diff --git a/doc/plugins/limit-conn-cn.md b/doc/zh-cn/plugins/limit-conn.md
similarity index 96%
rename from doc/plugins/limit-conn-cn.md
rename to doc/zh-cn/plugins/limit-conn.md
index 7c3a1f3b6088..9bb7c3c76e2f 100644
--- a/doc/plugins/limit-conn-cn.md
+++ b/doc/zh-cn/plugins/limit-conn.md
@@ -17,7 +17,7 @@
#
-->
-[English](limit-conn.md)
+[English](../../plugins/limit-conn.md)
# limit-conn
限制并发请求(或并发连接)插件。
@@ -65,10 +65,10 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
```
你可以使用浏览器打开 dashboard:`http://127.0.0.1:9080/apisix/dashboard/`,通过 web 界面来完成上面的操作,先增加一个 route:
-
+
然后在 route 页面中添加 limit-conn 插件:
-
+
#### test plugin
diff --git a/doc/plugins/limit-count-cn.md b/doc/zh-cn/plugins/limit-count.md
similarity index 97%
rename from doc/plugins/limit-count-cn.md
rename to doc/zh-cn/plugins/limit-count.md
index 0ea9808e7299..718c6af49e73 100644
--- a/doc/plugins/limit-count-cn.md
+++ b/doc/zh-cn/plugins/limit-count.md
@@ -17,7 +17,7 @@
#
-->
-[English](limit-count.md)
+[English](../../plugins/limit-count.md)
# limit-count
@@ -69,10 +69,10 @@ curl -i http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335
```
你可以使用浏览器打开 dashboard:`http://127.0.0.1:9080/apisix/dashboard/`,通过 web 界面来完成上面的操作,先增加一个 route:
-
+
然后在 route 页面中添加 limit-count 插件:
-
+
如果你需要一个集群级别的流量控制,我们可以借助 redis server 来完成。不同的 APISIX 节点之间将共享流量限速结果,实现集群流量限速。
diff --git a/doc/plugins/limit-req-cn.md b/doc/zh-cn/plugins/limit-req.md
similarity index 96%
rename from doc/plugins/limit-req-cn.md
rename to doc/zh-cn/plugins/limit-req.md
index 799160cfdc37..420359e2a422 100644
--- a/doc/plugins/limit-req-cn.md
+++ b/doc/zh-cn/plugins/limit-req.md
@@ -17,7 +17,7 @@
#
-->
-# [English](limit-req.md)
+# [English](../../plugins/limit-req.md)
# limit-req
@@ -64,11 +64,11 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
你可以使用浏览器打开 dashboard:`http://127.0.0.1:9080/apisix/dashboard/`,通过 web 界面来完成上面的操作,先增加一个 route:
-
+
然后在 route 页面中添加 limit-req 插件:
-
+
### 测试插件
diff --git a/doc/plugins/mqtt-proxy-cn.md b/doc/zh-cn/plugins/mqtt-proxy.md
similarity index 98%
rename from doc/plugins/mqtt-proxy-cn.md
rename to doc/zh-cn/plugins/mqtt-proxy.md
index 141e99897e26..d55a7d391d8e 100644
--- a/doc/plugins/mqtt-proxy-cn.md
+++ b/doc/zh-cn/plugins/mqtt-proxy.md
@@ -17,7 +17,7 @@
#
-->
-[English](mqtt-proxy.md)
+[English](../../plugins/mqtt-proxy.md)
# 目录
diff --git a/doc/plugins/prometheus-cn.md b/doc/zh-cn/plugins/prometheus.md
similarity index 93%
rename from doc/plugins/prometheus-cn.md
rename to doc/zh-cn/plugins/prometheus.md
index 1dd814285cf1..946d113d10a6 100644
--- a/doc/plugins/prometheus-cn.md
+++ b/doc/zh-cn/plugins/prometheus.md
@@ -17,7 +17,7 @@
#
-->
-[English](prometheus.md)
+[English](../../plugins/prometheus.md)
# prometheus
@@ -51,11 +51,11 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f13
你可以使用浏览器打开 dashboard:`http://127.0.0.1:9080/apisix/dashboard/`,通过 web 界面来完成上面的操作,先增加一个 route:
-
+
然后在 route 页面中添加 prometheus 插件:
-
+
## 如何提取指标数据
@@ -78,9 +78,9 @@ scrape_configs:
我们也可以在 prometheus 控制台中去检查状态:
-
+
-
+
### Grafana 面板
@@ -89,11 +89,11 @@ scrape_configs:
你可以到 [Grafana meta](https://grafana.com/grafana/dashboards/11719) 下载 `Grafana` 元数据.
-
+
-
+
-
+
### 可有的指标
diff --git a/doc/plugins/proxy-cache-cn.md b/doc/zh-cn/plugins/proxy-cache.md
similarity index 99%
rename from doc/plugins/proxy-cache-cn.md
rename to doc/zh-cn/plugins/proxy-cache.md
index 3a1337443581..9381ea883ae9 100644
--- a/doc/plugins/proxy-cache-cn.md
+++ b/doc/zh-cn/plugins/proxy-cache.md
@@ -17,7 +17,7 @@
#
-->
-[English](proxy-cache.md)
+[English](../../plugins/proxy-cache.md)
# proxy-cache
diff --git a/doc/plugins/proxy-mirror-cn.md b/doc/zh-cn/plugins/proxy-mirror.md
similarity index 98%
rename from doc/plugins/proxy-mirror-cn.md
rename to doc/zh-cn/plugins/proxy-mirror.md
index 2d310d0b1396..e4c4d3d3b77b 100644
--- a/doc/plugins/proxy-mirror-cn.md
+++ b/doc/zh-cn/plugins/proxy-mirror.md
@@ -17,7 +17,7 @@
#
-->
-[English](proxy-mirror.md)
+[English](../../plugins/proxy-mirror.md)
# proxy-mirror
diff --git a/doc/plugins/proxy-rewrite-cn.md b/doc/zh-cn/plugins/proxy-rewrite.md
similarity index 98%
rename from doc/plugins/proxy-rewrite-cn.md
rename to doc/zh-cn/plugins/proxy-rewrite.md
index f714ad5f4f5b..45a6c95040ea 100644
--- a/doc/plugins/proxy-rewrite-cn.md
+++ b/doc/zh-cn/plugins/proxy-rewrite.md
@@ -17,7 +17,7 @@
#
-->
-[English](proxy-rewrite.md)
+[English](../../plugins/proxy-rewrite.md)
# proxy-rewrite
上游代理信息重写插件。
diff --git a/doc/plugins/redirect-cn.md b/doc/zh-cn/plugins/redirect.md
similarity index 98%
rename from doc/plugins/redirect-cn.md
rename to doc/zh-cn/plugins/redirect.md
index b32b88cf9e05..ead153a44421 100644
--- a/doc/plugins/redirect-cn.md
+++ b/doc/zh-cn/plugins/redirect.md
@@ -17,7 +17,7 @@
#
-->
-[English](redirect.md)
+[English](../../plugins/redirect.md)
# redirect
diff --git a/doc/plugins/response-rewrite-cn.md b/doc/zh-cn/plugins/response-rewrite.md
similarity index 96%
rename from doc/plugins/response-rewrite-cn.md
rename to doc/zh-cn/plugins/response-rewrite.md
index 275b5f252182..83c5aac51c96 100644
--- a/doc/plugins/response-rewrite-cn.md
+++ b/doc/zh-cn/plugins/response-rewrite.md
@@ -17,7 +17,7 @@
#
-->
-[English](response-rewrite.md)
+[English](../../plugins/response-rewrite.md)
# response-rewrite
@@ -25,7 +25,7 @@
使用场景:
1、可以设置 `Access-Control-Allow-*` 等 header 信息,来实现 CORS (跨域资源共享)的功能。
-2、另外也可以通过配置 status_code 和 header 里面的 Location 来实现重定向,当然如果只是需要重定向功能,最好使用 [redirect](redirect-cn.md) 插件。
+2、另外也可以通过配置 status_code 和 header 里面的 Location 来实现重定向,当然如果只是需要重定向功能,最好使用 [redirect](redirect.md) 插件。
## 配置参数
diff --git a/doc/plugins/serverless-cn.md b/doc/zh-cn/plugins/serverless.md
similarity index 98%
rename from doc/plugins/serverless-cn.md
rename to doc/zh-cn/plugins/serverless.md
index fab9ad9e5a0b..7ef432662f00 100644
--- a/doc/plugins/serverless-cn.md
+++ b/doc/zh-cn/plugins/serverless.md
@@ -17,7 +17,7 @@
#
-->
-[English](serverless.md)
+[English](../../plugins/serverless.md)
# serverless
diff --git a/doc/plugins/skywalking-cn.md b/doc/zh-cn/plugins/skywalking.md
similarity index 95%
rename from doc/plugins/skywalking-cn.md
rename to doc/zh-cn/plugins/skywalking.md
index f0f09c82dbb8..91ae3c1ebffb 100644
--- a/doc/plugins/skywalking-cn.md
+++ b/doc/zh-cn/plugins/skywalking.md
@@ -17,7 +17,7 @@
#
-->
-[English](skywalking.md)
+[English](../../plugins/skywalking.md)
# 目录
- [目录](#目录)
@@ -70,11 +70,11 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f1
你可以使用浏览器打开 dashboard:`http://127.0.0.1:9080/apisix/dashboard/`,通过 web 界面来完成上面的操作,先增加一个 route:
-
+
然后在 route 页面中添加 skywalking 插件:
-
+
## 测试插件
@@ -108,7 +108,7 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f1
```
2. 打开管理页面
在浏览器里面输入http://10.110.149.175:8080,出现了如下界面,则表示安装成功
- 
+ 
3. 测试示例:
- 通过访问apisix,访问上游服务
@@ -124,9 +124,9 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f1
http://10.110.149.175:8080/
```
可以看到访问拓扑图\
- \
+ \
可以看到服务追踪图\
- 
+ 
## 禁用插件
当你想去掉插件的时候,很简单,在插件的配置中把对应的 json 配置删除即可,无须重启服务,即刻生效:
diff --git a/doc/plugins/syslog-cn.md b/doc/zh-cn/plugins/syslog.md
similarity index 100%
rename from doc/plugins/syslog-cn.md
rename to doc/zh-cn/plugins/syslog.md
diff --git a/doc/plugins/tcp-logger-cn.md b/doc/zh-cn/plugins/tcp-logger.md
similarity index 98%
rename from doc/plugins/tcp-logger-cn.md
rename to doc/zh-cn/plugins/tcp-logger.md
index ba29772858ec..652f2afadabb 100644
--- a/doc/plugins/tcp-logger-cn.md
+++ b/doc/zh-cn/plugins/tcp-logger.md
@@ -34,7 +34,7 @@
该插件提供了将Log Data作为批处理推送到外部TCP服务器的功能。如果您没有收到日志数据,请放心一些时间,它会在我们的批处理处理器中的计时器功能到期后自动发送日志。
有关Apache APISIX中Batch-Processor的更多信息,请参考。
-[Batch-Processor](../batch-processor-cn.md)
+[Batch-Processor](../batch-processor.md)
## 属性列表
diff --git a/doc/plugins/udp-logger-cn.md b/doc/zh-cn/plugins/udp-logger.md
similarity index 98%
rename from doc/plugins/udp-logger-cn.md
rename to doc/zh-cn/plugins/udp-logger.md
index 9bdbc4f7d385..f129dc2f8b64 100644
--- a/doc/plugins/udp-logger-cn.md
+++ b/doc/zh-cn/plugins/udp-logger.md
@@ -34,7 +34,7 @@
此插件提供了将批处理数据批量推送到外部UDP服务器的功能。如果您没有收到日志数据,请放心一些时间,它会在我们的批处理处理器中的计时器功能到期后自动发送日志
有关Apache APISIX中Batch-Processor的更多信息,请参考。
-[Batch-Processor](../batch-processor.md)
+[Batch-Processor](../../batch-processor.md)
## 属性列表
diff --git a/doc/plugins/wolf-rbac-cn.md b/doc/zh-cn/plugins/wolf-rbac.md
similarity index 98%
rename from doc/plugins/wolf-rbac-cn.md
rename to doc/zh-cn/plugins/wolf-rbac.md
index 1b9996c91ecc..0ed3f5cd42fc 100644
--- a/doc/plugins/wolf-rbac-cn.md
+++ b/doc/zh-cn/plugins/wolf-rbac.md
@@ -17,7 +17,7 @@
#
-->
-[English](wolf-rbac.md)
+[English](../../plugins/wolf-rbac.md)
# 目录
@@ -70,10 +70,10 @@ curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f
```
你可以使用浏览器打开 dashboard:`http://127.0.0.1:9080/apisix/dashboard/`,通过 web 界面来完成上面的操作,先增加一个 consumer:
-
+
然后在 consumer 页面中添加 wolf-rbac 插件:
-
+
注意: 上面填写的 `appid` 需要在wolf控制台中已经存在的.
diff --git a/doc/plugins/zipkin-cn.md b/doc/zh-cn/plugins/zipkin.md
similarity index 95%
rename from doc/plugins/zipkin-cn.md
rename to doc/zh-cn/plugins/zipkin.md
index 857f798b903d..fb7fc096a34c 100644
--- a/doc/plugins/zipkin-cn.md
+++ b/doc/zh-cn/plugins/zipkin.md
@@ -17,7 +17,7 @@
#
-->
-[English](zipkin.md)
+[English](../../plugins/zipkin.md)
# 目录
- [**名字**](#名字)
@@ -67,11 +67,11 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f1
你可以使用浏览器打开 dashboard:`http://127.0.0.1:9080/apisix/dashboard/`,通过 web 界面来完成上面的操作,先增加一个 route:
-
+
然后在 route 页面中添加 zipkin 插件:
-
+
## 测试插件
@@ -97,9 +97,9 @@ HTTP/1.1 200 OK
http://127.0.0.1:9411/zipkin
```
-
+
-
+
## 禁用插件
diff --git a/doc/profile-cn.md b/doc/zh-cn/profile.md
similarity index 100%
rename from doc/profile-cn.md
rename to doc/zh-cn/profile.md
diff --git a/doc/stand-alone-cn.md b/doc/zh-cn/stand-alone.md
similarity index 99%
rename from doc/stand-alone-cn.md
rename to doc/zh-cn/stand-alone.md
index 0da4b0912002..34127ce0c2de 100644
--- a/doc/stand-alone-cn.md
+++ b/doc/zh-cn/stand-alone.md
@@ -17,7 +17,7 @@
#
-->
-[English](stand-alone.md)
+[English](../stand-alone.md)
## Stand-alone mode
diff --git a/doc/stream-proxy-cn.md b/doc/zh-cn/stream-proxy.md
similarity index 96%
rename from doc/stream-proxy-cn.md
rename to doc/zh-cn/stream-proxy.md
index 0a413d73b3bf..afb9fd298826 100644
--- a/doc/stream-proxy-cn.md
+++ b/doc/zh-cn/stream-proxy.md
@@ -17,7 +17,7 @@
#
-->
-[English](stream-proxy.md)
+[English](../stream-proxy.md)
# Stream 代理
@@ -59,7 +59,7 @@ curl http://127.0.0.1:9080/apisix/admin/stream_routes/1 -H 'X-API-KEY: edd1c9f03
```
例子中 APISIX 对客户端IP为 `127.0.0.1` 的请求代理转发到上游主机 `127.0.0.1:1995`。
-更多用例,请参照 [test case](../t/stream-node/sanity.t).
+更多用例,请参照 [test case](../../t/stream-node/sanity.t).
## 更多限制选项