2 个版本
0.1.1 | 2019 年 10 月 20 日 |
---|---|
0.1.0 | 2019 年 10 月 20 日 |
在 HTTP 服务器 中排名 #1124
63KB
456 行(不包括注释)
limitation-proxy
持续集成 | |
最新版本 | |
文档 | |
包下载 | |
GitHub 下载 | |
许可证 |
目录
具有可配置速率限制的反向代理服务
关于
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 | |||
Linux | |||
macOS | |||
Windows |
测试(master 分支)
操作系统 | 稳定的Rust | 夜间Rust | MSRV |
---|---|---|---|
FreeBSD | |||
Linux | |||
macOS | |||
Windows |
检查(master 分支)
状态 | |
---|---|
代码检查 | |
格式化 |
行为准则
本项目遵循贡献者公约行为准则。通过参与,您应遵守此准则。如遇到不适当的行为,请通过[email protected]进行举报。
问题
如果您对此项目有任何问题或疑问,请通过GitHub问题联系我们。
贡献
我们邀请您为新的功能、修复或更新做出贡献,无论大小;我们总是很高兴收到pull请求,并尽我们所能尽快处理它们。
在您开始编码之前,我们建议通过GitHub问题讨论您的计划,特别是对于更雄心勃勃的贡献。这给了其他贡献者一个机会,指出正确的方向,对您的设计提供反馈,并帮助您了解是否有人在处理相同的事情。
发布历史
查看变更日志以获取完整的发布历史。
作者
由Fletcher Nichol ([email protected])创建和维护。
许可证
根据Mozilla公共许可证版本2.0 (LICENSE.txt)授权。
除非您明确表示,否则,您有意提交给工作以包含在内的任何贡献,根据MPL-2.0许可证的定义,应按上述方式授权,不附加任何其他条款或条件。
依赖项
~24–35MB
~625K SLoC