#actix-web #rate-limiting #middleware #store #redis #controller #redis-store

actix-rl

actix-rl 是为 actix-web 库提供的速率限制中间件

4 个版本

0.2.2 2024 年 7 月 4 日
0.2.1 2024 年 7 月 4 日
0.2.0 2024 年 7 月 3 日
0.1.0 2024 年 7 月 3 日

#459数据库接口

Download history 292/week @ 2024-07-02 35/week @ 2024-07-09 1/week @ 2024-07-16 28/week @ 2024-07-23

每月 356 次下载

MIT 许可证

38KB
688

actix-rl: actix-web 的速率限制器

描述

actix-rl 是为 actix-web 库提供的速率限制中间件。它支持异步处理,并目前提供两种存储选项:内存存储(MemStore)和 Redis 存储(RedisStore)。

如果您有其他存储选项,请随时提交 Pull Request。欢迎 PR。

特性

特性 组件 描述
默认 MemStore 在内存中存储数据
redis-store RedisStore 使用来自 redis 的异步连接存储数据

用法

用法

  1. 定义一个 Store,其中程序存储信息和设置超时。
  2. 定义一个 Controller。控制器用于定义中间件响应行为,例如在异常期间如何返回 HTTP 信息。您也可以使用库提供的默认函数,但在大多数情况下,您需要自定义响应以返回必要的限制信息给客户端。
  3. 最后,使用来自 actix-webwrap 函数将 Middleware 添加到您的 HTTP 服务器。

示例

您可以在 examples 文件夹中找到示例。

存储

Store 用于存储缓存信息。

MemCache 为例

// data timeout for each key is 10 seconds, with 1024 init capacity.
let store = actix_rl::store::MemCache::new(1024, chrono::Duration::seconds(10));

控制器

Controller 是一组函数。要创建一个默认的

let controller = controller::Controller::new();

您可以通过修改 Controller 来确定哪些请求应该进行检查

let controller = controller.with_do_rate_limit(|req| !req.path().start_with("/healthz"));

在这种情况下,只有那些不带前缀 /healthz 的请求将由速率限制器进行检查

有关更多功能,请参阅 Controller 的文档。

速率限制器

定义一个 RateLimiterwrap 来 HTTP 服务器

let rate_limiter = actix_rl::middleware::RateLimitMiddleware::new(
    store,
    10, // max count is 10, which means max 10 hits per 10 seconds.
    controller,
);

然后,将其添加到 actix-web HTTP 服务器包装中

App::new()
   .wrap(rate_limiter)
    // ...

依赖项

~15–26MB
~475K SLoC