Nginx-http_limit_req_module模块

文章目录


前言

如何限制每个客户端每秒处理请求数


一、ngx_http_limit_req_module模块

生效阶段: NGX_HTTP_PREACCESS_PHASE

模块默认编译进nginx,通过--without-http_limit_req_module禁用。

生效范围:

  • 全部worker进程(基于共享内存)
  • 进入preaccess阶段前不生效

ngx_http_limit_req_module官方传送门

引用了leaky bucket算法

二、指令

1.limit_req_zone

使用示例:

bash 复制代码
Syntax:	limit_req_zone key zone=name:size rate=rate [sync];
Default:	---
Context:	http

定义共享内存(包括大小),以及key关键字和限制速率

rate 单位r/s或者r/m 每秒或者每分钟可以处理的请求数。

2.limit_req

使用示例:

bash 复制代码
Syntax:	limit_req zone=name [burst=number] [nodelay | delay=number];
Default:	---
Context:	http, server, location

限制并发连接数

burst 默认为0 (根据leaky bucket算法,相当于下面的盆承接流量)

nodelay, 对burst中的请求不再采用延时处理的做法,而是直接处理。

3.limit_req_log_level

使用示例:

bash 复制代码
Syntax:	limit_req_log_level info | notice | warn | error;
Default:	
limit_req_log_level error;
Context:	http, server, location
This directive appeared in version 0.8.18.

限制并发连接数

4.limit_req_status

使用示例:

bash 复制代码
Syntax:	limit_req_status code;
Default:	
limit_req_status 503;
Context:	http, server, location
This directive appeared in version 1.3.15.

限制并发连接数

实验

burst取默认0的情况

bash 复制代码
# 限速,每分钟两次请求
limit_req_zone $binary_remote_addr zone=req:10m rate=2r/m;

server {
        server_name limit_req.test.io;
        root html/;
        error_log  /var/log/nginx/myerror.log info;
        location / {
                limit_req_status 500;
                limit_req_log_level warn;
                limit_req zone=req;
        }
}

第一次请求成功,后面的请求返回了500。

error.log日志可以看到限速日志。

burst不取默认值

bash 复制代码
limit_req_zone $binary_remote_addr zone=req:10m rate=2r/m;

server {
	server_name limit_req.test.io;
        root html/;
	error_log  /var/log/nginx/myerror.log info;        
        location / {
		limit_req_status 500;
 		limit_req_log_level warn;
 		# limit_req zone=req;
		limit_req zone=req burst=5 nodelay;
	}

}

再次请求,可以看到,请求到5次,后开始限制,burst相当于一个桶,承接请求,如果桶在限速时间内满了,则会触发限制。

nodelay 这个配置,如果不配置,大家可以是一些,请求会被卡住,等待响应,而不是之间收到反馈,所以,burst和nodelay是一起使用。

总结

后续会继续补充更多使用的案例。

相关推荐
老顾聊技术3 分钟前
“Anthropic 最新发布的 AI Skills:赋能任务自动化与跨领域应用“
运维·人工智能·自动化
令狐少侠20119 分钟前
Linux 系统部署夜莺 nightingale 监控公司的watchdog
linux·运维·服务器
百度Geek说1 小时前
百度流式计算开发平台的降本增效之路
运维·云原生
e***98571 小时前
MobaXterm全能运维实战指南
运维
Voyager_41 小时前
OS八股:HTTP 与 WebSocket 的通信模型差异 —— 理解等待、轮询、阻塞与全双工
websocket·网络协议·http
last demo1 小时前
docker容器
运维·docker·容器
一人の梅雨2 小时前
亚马逊SP-API商品评论接口实战:情感分析+商业洞察挖掘的差异化方案
运维·前端·数据库
养乐多q.♡2 小时前
docker镜像的nginx配置证书SSL,单独配置单个localtion使用证书,其他nginx配置不影响
nginx·docker·ssl
FED_AF2 小时前
rsync远程文件同步实用指南
运维·rsync
Q16849645152 小时前
知识点-创建、查看和编辑文本文件
linux·运维