nginx限制请求数(ngx_http_limit_req_module)模块

本文详细介绍了Nginx的ngx_http_limit_req_module模块,用于限制请求处理频率,特别是针对单个IP地址的请求。通过limit_req_zone和limit_req配置参数,实现请求频率的控制和超额请求的延迟或拒绝。

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

nginx限制请求数(ngx_http_limit_req_module)模块

2016年04月06日 17:36:58 亦非我所愿丶 阅读数:2629 标签: nginxmodule 更多

个人分类: nginx

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/wanglei_storage/article/details/51076882

上一篇文章主要写nginx限制连接数ngx_http_limit_conn_module 模块的作用及使用方法,下面来写ngx_http_limit_req_module模块的作用及使用。

通过ngx_http_limit_req_module 模块可以通过定义的键值来限制请求处理的频率。特别的,可以限制来自单个IP地址的请求处理频率。 限制的方法如同漏斗,每秒固定处理请求数,推迟过多请求。

该模块提供了两个配置参数,limit_req_zone 和 limit_req ,其中 limit_req_zone 只能配置在 http{} 段,而 limit_req 则可以配置于http{},server{},location{} 区段中。


第三方模块编译安装参数:

这里写图片描述


一、limit_req_zone

语法:limit_req_zone $variable zone=name:size rate=rate; 
配置段:http

该指令设置一块共享内存限制域用来保存键值的状态参数。特别是保存了当前超出请求的数量。键的值就是指定的变量(控制不被计算)。如:

这里写图片描述

注释: 
使用$binary_remote_addr变量,可以将每条状态记录的大小减少到64个字节,这样1M的内存可以保存大约1万6千个64字节的记录

如果限制域的存储空间耗尽了,对于后续所有请求,服务器都会返回503(Service Temporarily Unavailable)错误

速度可以设置为每秒处理请求数和每分钟处理请求数,其值必须是整数,所以如果你需要每秒处理少于1个的请求,2秒处理一个请求,可以使用30r/m


二、limit_req

语法: limit_req zone=name burst=number [nodelay]; 
配置段:http,server,location

设置对应的共享内存限制域和允许被处理的最大请求数阀值。如果请求的频率超过了限制域配置的值,请求处理会被延迟,所以所有的请求都是以定义的频率被处理的。超过频率限制的请求会被延迟,直到被延迟的请求数超过了定义的阀值,这时,这个请求会被终止,并返回503(Service Tempporarily Unavailable)错误,这个阀值的默认值为0,如:

限制频率每秒不超过一个请求,同时允许超过频率限制的请求数不多于100个;如果不希望超过的请求被延迟,可以用nodelay参数。

这里写图片描述


三、配置使用示例

limit_req_zone $binary_remote_addr zone=showjoy_req:20m rate=1r/s; 
主要是用来定义变量,空间名称,以及共享内存大小。

limit_req zone=showjoy_req burst=100 nodelay; 
主要是用来使用前面定义的空间,定义请求频率限制,使用nodelay则表示不希望超过的请求被延迟。

这里写图片描述

可能要对某些IP不做限制,需要使用到白名单。

转载于:https://my.oschina.net/u/3367404/blog/2999187

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值