当前位置: 首页 > news >正文

Nginx-http_limit_req_module模块

文章目录

  • 前言
  • 一、ngx_http_limit_req_module模块
  • 二、指令
    • 1.limit_req_zone
    • 2.limit_req
    • 3.limit_req_log_level
    • 4.limit_req_status
  • 实验
    • burst取默认0的情况
    • burst不取默认值
  • 总结


前言

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


一、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

使用示例:

Syntax:	limit_req_zone key zone=name:size rate=rate [sync];
Default:	—
Context:	http

定义共享内存(包括大小),以及key关键字和限制速率
rate 单位r/s或者r/m 每秒或者每分钟可以处理的请求数。

2.limit_req

使用示例:

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

使用示例:

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

使用示例:

Syntax:	limit_req_status code;
Default:	
limit_req_status 503;
Context:	http, server, location
This directive appeared in version 1.3.15.

限制并发连接数

实验

burst取默认0的情况

# 限速,每分钟两次请求
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不取默认值

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是一起使用。
在这里插入图片描述

总结

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • docker基础知识以及windows上的docker desktop 安装
  • Unity实现安卓App预览图片、Pdf文件和视频的一种解决方案
  • SpringBootWeb 篇-入门了解 Swagger 的具体使用
  • 详细谈谈负载均衡的startupProbe探针、livenessProbe探针、readnessProbe探针如何使用以及使用差异化
  • 【深度学习】图形模型基础(5):线性回归模型第三部分:线性回归模型拟合
  • sqlmap使用之-post注入、head注入(ua、cookie、referer)
  • 【HarmonyOS】获取通讯录信息
  • hudi数据湖万字全方位教程+应用示例
  • 14-47 剑和诗人21 - 2024年如何打造AI创业公司
  • google Guava组件实现原理和Java使用场景【主要是本地缓存Cache】
  • 如何理解Node.js?NPM?Yarn?Vue?React?
  • mybatis动态传入参数 pgsql 日期 Interval ,day,minute
  • FastGPT+OneAI接入网络模型
  • python调用阿里云汇率接口
  • 开放式耳机哪款性价比高?这五款超值精品不容错过
  • CODING 缺陷管理功能正式开始公测
  • JavaScript设计模式之工厂模式
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • 前端临床手札——文件上传
  • 数组大概知多少
  • 通过几道题目学习二叉搜索树
  • 为视图添加丝滑的水波纹
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​TypeScript都不会用,也敢说会前端?
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)stm32之通信协议
  • (学习日记)2024.01.19
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • **CI中自动类加载的用法总结
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net 4.0发布后不能正常显示图片问题
  • .Net 6.0 处理跨域的方式
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net core控制台应用程序初识
  • .net framework 4.0中如何 输出 form 的name属性。
  • .Net Memory Profiler的使用举例
  • .Net 知识杂记
  • .NetCore部署微服务(二)
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET下ASPX编程的几个小问题
  • .Net组件程序设计之线程、并发管理(一)
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [AIGC] Java 和 Kotlin 的区别
  • [C#]猫叫人醒老鼠跑 C#的委托及事件
  • [C#小技巧]如何捕捉上升沿和下降沿
  • [corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape
  • [IE9] IE9 RC版下载链接
  • [iOS]iOS获取设备信息经常用法
  • [json]定义、读写