blob: 5f4350b033d6ed0fdbe9d8d9d0999e776f441e04 [file] [log] [blame] [view]
---
title: 限速
slug: /getting-started/rate-limiting
---
<head>
<link rel="canonical" href="https://docs.api7.ai/apisix/getting-started/rate-limiting" />
</head>
> 本教程由 [API7.ai](https://api7.ai/) 编写。
APISIX 是一个统一的控制中心,它管理 API 和微服务的进出流量。除了客户端发来的合理的请求,还可能存在网络爬虫产生的不必要的流量,此外,网络攻击(比如 DDos)也可能产生非法请求。
APISIX 提供限速功能,通过限制在规定时间内发送到上游服务的请求数量来保护 APIs 和微服务。请求的计数在内存中完成,具有低延迟和高性能的特点。
<br />
<div style={{textAlign: 'center'}}>
<img src="https://static.apiseven.com/uploads/2023/02/20/l9G9Kq41_rate-limiting.png" alt="Routes Diagram" />
</div>
<br />
在本教程中,你将启用 `limit-count` 插件来限制传入流量的速率。
## 前置条件
1. 参考[入门指南](./README.md)完成 APISIX 的安装。
2. 完成[配置路由](./configure-routes.md#route-是什么)。
## 启用 Rate Limiting
在教程[配置路由](./configure-routes.md)中,我们已经创建了路由 `getting-started-ip`,我们通过 `PATCH` 方法为该路由增加 `limit-count` 插件:
```shell
curl -i "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{
"plugins": {
"limit-count": {
"count": 2,
"time_window": 10,
"rejected_code": 503
}
}
}'
```
如果增加插件成功,你将得到返回 `HTTP/1.1 201 Created`。上述配置将传入流量的速率限制为每 10 秒最多 2 个请求。
### 验证
我们同时生成 100 个请求来测试限速插件的效果。
```shell
count=$(seq 100 | xargs -I {} curl "http://127.0.0.1:9080/ip" -I -sL | grep "503" | wc -l); echo \"200\": $((100 - $count)), \"503\": $count
```
请求结果同预期一致:在这 100 个请求中,有 2 个请求发送成功(状态码为 `200`),其他请求均被拒绝(状态码为 `503`)。
```text
"200": 2, "503": 98
```
## 禁用 Rate Limiting
将参数设置 `_meta.disable` `true`,即可禁用限速插件。
```shell
curl -i "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{
"plugins": {
"limit-count": {
"_meta": {
"disable": true
}
}
}
}'
```
### 验证
我们再次同时生成 100 个请求来测试限速插件是否已被禁用:
```shell
count=$(seq 100 | xargs -i curl "http://127.0.0.1:9080/ip" -I -sL | grep "503" | wc -l); echo \"200\": $((100 - $count)), \"503\": $count
```
结果显示所有的请求均成功:
```text
"200": 100, "503": 0
```
## 更多
你可以使用 APISIX 的变量来配置限速插件的规则,比如 `$host` `$uri`。此外,APISIX 也支持使用 Redis 集群进行限速配置,即通过 Redis 来进行计数。
## 下一步
恭喜你!你已经学习了如何配置限速插件,这也意味着你已经完成了所有的入门教程。
你可以继续学习其他文档来定制 APISIX,以满足你的生产环境需要。