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是一起使用。

总结

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

相关推荐
小时候的阳光7 小时前
Docker版Percona Xtrabackup全量压缩脚本
运维·docker·容器
4***17549 小时前
Nginx auth_request详解
运维·nginx·xcode
梦想的旅途29 小时前
企业群运营自动化:RPA技术高效赋能
运维·自动化·rpa
꒰ঌ小武໒꒱9 小时前
RuoYi-Vue 前端环境搭建与部署完整教程
前端·javascript·vue.js·nginx
hhwyqwqhhwy10 小时前
Linux file->private
linux·运维·服务器
WongKyunban10 小时前
在Linux下制作软件安装包
linux·运维·服务器
hweiyu0010 小时前
Linux 命令:parted
linux·运维·服务器
烽火聊员10 小时前
CertificateCreator生成服务器证书server.pfx
运维·服务器
搞全栈小苏11 小时前
Linux下 cmake所有版本适用/下载编译使用教程 附cmake3.26安装包
linux·运维·ubuntu
MyFreeIT11 小时前
Docker Manual
运维·docker·容器