dynamic-limit-req: NGINX 模块用于动态锁定 IP 并定期释放
安装
您可以在任何基于 RHEL 的发行版中安装此模块,包括但不限于:
- RedHat Enterprise Linux 7、8、9 和 10
- CentOS 7、8、9
- AlmaLinux 8、9
- Rocky Linux 8、9
- Amazon Linux 2 和 Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-dynamic-limit-req
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-dynamic-limit-req
通过在 /etc/nginx/nginx.conf 的顶部添加以下内容来启用该模块:
load_module modules/ngx_http_dynamic_limit_req_module.so;
本文档描述了 nginx-module-dynamic-limit-req v1.9.3,于 2021 年 1 月 29 日发布。
介绍
ngx_dynamic_limit_req_module 模块用于动态锁定 IP 并定期释放。
原理
ngx_dynamic_limit_req_module 模块用于限制每个定义键的请求处理速率,特别是来自单个 IP 地址的请求处理速率。限制是通过“漏桶”方法实现的。
关于
该模块是基于 ngx_http_limit_req_module 的扩展。
捐赠
开发者们不懈努力以改进和开发 ngx_dynamic_limit_req_module。为了提供今天的软件,投入了大量时间,但这是一个极其耗时的过程且没有经济回报。如果您喜欢使用该软件,请考虑向开发者捐赠,以便他们可以花更多时间实施改进。
支付宝:

扩展
该模块可以与 RedisPushIptables 一起使用,应用层匹配后网络层进行拦截。尽管网络层拦截可以节省资源,但也存在不足。假设仅过滤一个特定接口而不过滤其他接口,那么不需要过滤的接口也将无法访问。尽管在网络层或传输层无法实现精确控制,但在应用层可以进行精确控制。用户需要权衡哪种解决方案更适合当时的事件。
Api-count
如果您想使用 API 计数功能,请使用 limithit-API_alerts。因为并非每个人都需要此功能,所以未合并到主干中。用户如果不需要此功能,可以跳过此段描述。
git clone https://github.com/limithit/ngx_dynamic_limit_req_module.git
cd ngx_dynamic_limit_req_module
git checkout limithit-API_alerts
root@debian:~# redis-cli
127.0.0.1:6379> SELECT 3
127.0.0.1:6379[3]> scan 0 match *12/Dec/2018* count 10000
127.0.0.1:6379[3]> scan 0 match *PV count 10000
1) "0"
2) 1) "[13/Dec/2018]PV"
2) "[12/Dec/2018]PV"
127.0.0.1:6379[3]> get [12/Dec/2018]PV
"9144"
127.0.0.1:6379[3]> get [13/Dec/2018]PV
"8066"
127.0.0.1:6379[3]> get [13/Dec/2018]UV
"214"
该模块与以下 nginx 版本兼容:
作者
Gandalf zhibu1991@gmail.com
GitHub
您可以在 nginx-module-dynamic-limit-req 的 GitHub 仓库 中找到此模块的其他配置提示和文档。