#rate-limiting #reverse-proxy #proxy #actix-web #back-end #http-service

bin+lib limitation-proxy

具有可配置速率限制的反向代理服务

2 个版本

0.1.1 2019 年 10 月 20 日
0.1.0 2019 年 10 月 20 日

HTTP 服务器 中排名 #1124

MPL-2.0 许可证

63KB
456 行(不包括注释)

limitation-proxy

持续集成 CI Status
最新版本 Latest version
文档 Documentation
包下载 Crate downloads
GitHub 下载 GitHub downloads
许可证 Crate license

目录

具有可配置速率限制的反向代理服务

关于

limitation-proxy 服务是一个 HTTP 反向代理服务,位于另一个 HTTP 服务之前,将对所有通过它的请求进行速率限制。速率限制是一种固定窗口速率限制策略的变体,并使用 Redis 进行持久化。

        +------------------+            +-----------------------+
        |                  |            |                       |
        |                  |            |                       |
    --->+ limitation-proxy +----------->+        proxied        |
        |                  +<-----------+        back end       |
        |                  |            |                       |
        |                  |            |                       |
        +--------+---------+            +-----------------------+
                 |
                 v
        +--------+---------+
        |                  |
        |                  |
        |      Redis       |
        |                  |
        |                  |
        +------------------+

安装

Cargo 安装

如果已安装 Rust,则使用 Cargo 安装非常简单

$ cargo install limitation-proxy

从源码安装

要从源码安装,您可以克隆 Git 仓库,使用 Cargo 构建,并将二进制文件复制到目标目录。这将从 master 分支的最新提交构建项目,这可能与最新稳定版本不对应

$ git clone https://github.com/fnichol/limitation.git
$ cd limitation
$ cargo build --bin limitation-proxy --release
$ cp ./target/release/limitation-proxy /dest/path/

使用方法

您可以使用 -h/--help 标志来获取

$ limitation-proxy
limitation-proxy 0.1.1
Fletcher Nichol <[email protected]>

A reverse proxy service with configurable rate limiting

Project home page: https://github.com/fnichol/limitation

USAGE:
    limitation-proxy

OPTIONS:
    -b, --bind <BIND>        Bind address for the service [env: BIND_ADDR]
                             [default: 0.0.0.0:8080]
    -H, --header <HEADER>    Header to be used as the key for rate-limiting
                             [default: authorization]
    -l, --limit <LIMIT>      Maximum number of requests per key in the period
                             [default: 5000]
    -P, --period <PERIOD>    Duration of period window in seconds [default:
                             3600]
    -p, --proxy <PROXY>      Backend proxy URL target [env: PROXY_URL]
                             [default: http://127.0.0.1:8000]
    -r, --redis <REDIS>      Redis URL for persistence [env: REDIS_URL]
                             [default: redis://127.0.0.1/]
    -h, --help               Prints help information
    -V, --version            Prints version information

需要运行 limitation-proxy 的 Redis 实例,因此我们假设一个正在本地运行且可访问 127.0.0.1:6379,这恰好是这个服务的默认设置。不带任何参数启动服务将以默认设置运行

$ limitation-proxy

您还可以使用参数覆盖默认设置。例如,这将运行限制在 60 秒窗口内最多 100 个请求的服务

$ limitation-proxy --limit 100 --period 60

想法和未来工作

这些都是该项目的一些想法和潜在的未来工作。如果您正在阅读此内容,那么您可能对此感兴趣或想提供帮助?太好了!请务必查看 [贡献][#contributing] 部分,并深入了解!

  • 允许配置规则以匹配特定的 HTTP 请求,可能通过 HTTP 动词、路径、头等信息进行。
  • 在头部值内部允许更细粒度的匹配。目前,一个 Authorization 头部只会根据完整的值字符串进行匹配,这个字符串可能包含基本认证和基于令牌的认证。
  • 支持传入TLS和/或TLS到代理的后端。
  • 添加一个API路径来检查用户的当前限制状态。请注意,为了支持这个功能,可能需要对limitation存储库进行一些小的功能工作。
  • 允许此服务覆盖代理后端的子路径。目前,对/a/b的请求将被代理到后端的/a/b路径。如果服务可以将/a/b发送到后端的/api/v1/a/b,可能会很有用。

持续集成状态

构建(master 分支)

操作系统 稳定的Rust 夜间Rust MSRV
FreeBSD FreeBSD Stable Build Status FreeBSD Nightly Build Status FreeBSD Oldest Build Status
Linux Linux Stable Build Status Linux Nightly Build Status Linux Oldest Build Status
macOS macOS Stable Build Status macOS Nightly Build Status macOS Oldest Build Status
Windows Windows Stable Build Status Windows Nightly Build Status Windows Oldest Build Status

测试(master 分支)

操作系统 稳定的Rust 夜间Rust MSRV
FreeBSD FreeBSD Stable Test Status FreeBSD Nightly Test Status FreeBSD Oldest Test Status
Linux Linux Stable Test Status Linux Nightly Test Status Linux Oldest Test Status
macOS macOS Stable Test Status macOS Nightly Test Status macOS Oldest Test Status
Windows Windows Stable Test Status Windows Nightly Test Status Windows Oldest Test Status

检查(master 分支)

状态
代码检查 Lint Status
格式化 Format Status

行为准则

本项目遵循贡献者公约行为准则。通过参与,您应遵守此准则。如遇到不适当的行为,请通过[email protected]进行举报。

问题

如果您对此项目有任何问题或疑问,请通过GitHub问题联系我们。

贡献

我们邀请您为新的功能、修复或更新做出贡献,无论大小;我们总是很高兴收到pull请求,并尽我们所能尽快处理它们。

在您开始编码之前,我们建议通过GitHub问题讨论您的计划,特别是对于更雄心勃勃的贡献。这给了其他贡献者一个机会,指出正确的方向,对您的设计提供反馈,并帮助您了解是否有人在处理相同的事情。

发布历史

查看变更日志以获取完整的发布历史。

作者

Fletcher Nichol ([email protected])创建和维护。

许可证

根据Mozilla公共许可证版本2.0 (LICENSE.txt)授权。

除非您明确表示,否则,您有意提交给工作以包含在内的任何贡献,根据MPL-2.0许可证的定义,应按上述方式授权,不附加任何其他条款或条件。

依赖项

~24–35MB
~625K SLoC