nginx请求频率限制模块ngx_http_limit_req_module

本文详细介绍了Nginx的ngx_http_limit_req_module模块,包括如何通过配置限制客户端请求频率来防止恶意攻击,以及各个相关指令的用法和常见错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块: ngx_http_limit_req_module

作用: 限制客户端请求频率,防止恶意攻击

配置示例:

http {
    limit_req_zone $binary_remote_addr zone=req_perip:50m rate=10r/s;

    ...

    server {

        ...

        location /api/ {
                limit_req zone=req_perip burst=50 nodelay;
                limit_req_status 503;
        }
    }
}

说明: 示例中定义的区域名称为req_peripzone=req_perip,分配内存大小为50m(如果限制域的存储空间耗尽了,对于后续所有请求,服务器都会返回 503同一个ip$binary_remote_addr平均处理的请求频率不能超过每秒10次rate=10r/s 如果超过每秒10次但超过的请求数量小于等于50burst=50时,会延迟请求。如果超过每秒10次的请求数超过50,则立即返回503limit_req_status 503给客户端

 

涉及指令:

  limit_req_zone

  limit_req

  limit_req_status 

  limit_req_log_level 

 

指令详解:

limit_req_zone

语法: limit_req_zone key zone=name:size rate=rate; (可理解为该指令用来定义限制请求频率) 
可配置区域: http 

key: 必选项;取值范围: 1,text(文本); 2,nginx变量;3,text和nginx变量的组合; 注: 1.7.6版本之前取值只能是nginx变量

name: 必选项;自定义字符串

size: 必选项;分配内存大小,用来保存键值的状态参数

rate: 必选项;每秒可请求的频率(r/s), 或每分钟可请求的频率(r/m)

  

limit_req 

语法: limit_req zone=name [burst=number] [nodelay]; (可理解为使用定义的限制请求频率,一定是先定义后使用!也就是一定要有limit_req_zone指令的配置后才能使用该配置)
可配置区域: http, server, location 

name: 必选项;自定义字符串, 名字必须与limit_req_zone中zone=name这个名字一致

number: 必选项;正整数数字, 平均每秒允许不超过limit_req_zone指令中rate规定的请求数,并且不会超过该值所指定数量的请求, 可延迟请求的数量

nodelay: 可选配置, 表示请求频率超过rate规定值后又超过burst规定值后立即返回客户端503(可设置返回code)

  

limit_req_status 

语法: limit_req_status code;
默认值: 503
可配置区域: http, server, location

表示超出limit_req配置的请求数量后返回给客户端的错误码

使用该指令最低版本 1.3.15

  

limit_req_log_level

语法: limit_req_log_level info | notice | warn | error;
默认值: limit_req_log_level error;
可配置区域: http, server, location

当服务器拒绝处理由于速率超过或延迟请求处理而拒绝处理请求时,设置所需的日志记录级别。

最低版本: 0.8.18

  

常见错误:

  nginx: [emerg] zero size shared memory zone "oneip"

   出现此错误都是因为在未指定limit_req_zone指定就使用了limit_req指令的原因(或者limit_req中的name值和limit_req_zone中定义的name值不一致) 

 

转载于:https://www.cnblogs.com/zhen-rh/p/7424942.html

Nginx 安装过程中使用 `--with-ngx_http_limit_req_module` 参数,意味着你要编译 Nginx 时包含 ngx_http_limit_req 模块。此模块用于限制请求速率,防止因过快的访问导致服务器性能下降或资源耗尽。通过此选项,Nginx 在启动时会自动加载并启用这个功能,允许你在配置文件中设置规则来限制每个 IP 地址对某个 URI 的请求数量。 安装过程可能包括以下步骤: 1. **下载 Nginx source code**: 下载 Nginx 最新的源代码,可以从 Nginx 官方网站下载,或者使用 package manager 如 apt-get 或 yum。 2. **配置编译选项**: 当你运行 `./configure` 命令时,在命令行添加 `--with-http_limit_req_module`,表示你希望包含 limit_req 模块。完整命令可能会像这样: ``` ./configure --prefix=/opt/nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_limit_req_module ``` 3. **编译与安装**: 完成配置后,运行 `make` 和 `make install` 来编译并安装 Nginx,包括 limit_req 模块。 4. **配置 Nginx**: 在 Nginx 配置文件(如 `/etc/nginx/nginx.conf`)中,添加相关限制规则到 `http` 或 `server` 部分,如 `limit_req_zone` 和 `limit_req_per_client` 设置。 5. **启动 Nginx**: 重新启动 Nginx 以应用新配置,确保 limit_req 模块开始生效。 6. **验证效果**: 可以通过向服务器发送请求,观察是否有超出限制的情况以及响应头中的相关信息,来验证 limit_req 模块是否按预期工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值