关于nginx上的limit_req_zone模块限流使用与geo与map的白名单配置
今天正好是五一假期 记录一下前几天关于开发中遇到的nginx上的问题
之前接口被人扒了 访问量激增 之前的同事配置了一个nginx上的配置来解决 如下
1.在nginx的http模块下面加上下面的语句
limit_req_zone $binary_remote_addr zone=test:10m rate=10r/s;
说明:
区域名称为test,这个名称自定义即可,占用空间大小为10m,平均处理的请求频率不能超过每秒十次。
binary_remote_addr是remote_addr(客户端IP)的二进制格式,固定占用4个字节,这里官方文档建议使用$binary_remote_addr,原因为保持内存存储大小相等。
2.在nginx的server模块下面加上下面的语句
location / {limit_req zone=test burst=20 nodelay ;
说明:
burst表示在超过设定的处理速率后能额外处理的请求数。当rate=10r/s时,将1s拆成10份,即每100ms可处理1个请求。
nodelay针对的是burst 参数,指定了过多请求被延迟的delay限制。默认值为零,即延迟所有过多的请求。
因此,burst往往结合nodelay一起使用。
当时同事就是用这个方法解决了线上的问题,但是这样导致出了另一个问题,就是这个接口还有其他单位的同事在使用,因为上面的配置是针对全部IP去进行的,所以其他单位的同事就来反馈问题了,于是就有了下面的方法
使用与geo与map的白名单配置
1.在nginx.conf的http部分中配置白名单:
geo $limit {default 1;127.0.0.1 0;
}
map $limit $limit_key {0 "";1 $binary_remote_addr;
}
limit_req_zone $limit_key zone=myRateLimit:10m rate=10r/s;
说明:
geo对于白名单(子网或IP都可以) 将返回0,其他IP将返回1。
map将limit转换为limit_key,如果是limit是0(白名单),则返回空字符串;如果是1,则返回客户端实际IP。
limit_req_zone限流的key不再使用binary_remote_addr,而是$limit_key来动态获取值。如果是白名单,limit_req_zone 的限流key则为空字符串,将不会限流;若不是白名单,将会对客户端IP进行限流。
按照以上的方法配置完了以后,我们在测试环境没有问题,于是开始上线
!!!注意!!!
我们在上线修改完配置后,出现了另一个问题,这个问题很蠢,但是确实很容易发生,就是nginx的缓存问题
我们在修改完配置文件后,使用 ./nginx -s reload 对nginx进行重启,发现没有效果,于是开始排查,配置与测试环境一模一样,于是继续修改,加上了access.log,想看一下日志,结果access.log修改完后重启nginx也没生效,access.log文件被创建了,但是没有日志打印上去。
最后的解决方案是使用stop停止nginx服务,再重新启动,问题完美解决
下面把nginx使用到的指令贴到下面
./nginx:启动nginx
./nginx -s stop:关闭nginx
./nginx -s reload:重新加载配置
./nginx -t:检测配置文件是否正常
关于nginx上的limit_req_zone模块限流使用与geo与map的白名单配置相关推荐
- 2.Nginx实现负载均衡、限流、缓存、黑白名单和灰度发布
Author:Young Date:2020-07-22 参考链接: https://maimai.cn/article/detail?fid=1499586218&efid=7sV_7ICG ...
- Nginx之原理,限流,日志切割,正反代理,HTTPS配置
文章目录 1 Nginx原理 1.1 Nginx怎么处理请求 1.2 Nginx是如何实现高并发 1.3 Nginx高可用性怎么配置 1.4 为什么Nginx不使用多线程 1.5 Nginx动态资源. ...
- 轻松两步,我在 SpringBoot 服务上实现了接口限流
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视 ...
- Nginx之——负载均衡、限流、缓存、黑名单和灰度发布
转载请注明出处:https://blog.csdn.net/l1028386804/article/details/90523813 一.Nginx安装(基于CentOS 6.5) 1.yum命令安装 ...
- Nginx 实现负载均衡、限流、缓存、黑白名单和灰度发布,这是最全的一篇了!
Nginx]实现负载均衡.限流.缓存.黑白名单和灰度发布,这是最全的一篇了! Nginx安装 注意:这里以CentOS 6.8服务器为例,以root用户身份来安装Nginx. 1.安装依赖环境 yum ...
- nginx域名访问的白名单配置梳理
在日常运维工作中,会碰到这样的需求:设置网站访问只对某些ip开放,其他ip的客户端都不能访问.可以通过下面四种方法来达到这种效果: 1)针对nginx域名配置所启用的端口(比如80端口)在iptabl ...
- nginx 限流模块和fail2ban搭配使用
ngnix的限流模块主要有三个: limit_conn 限制某个ip的tcp连接数目或者限制某个server(网站)整体的连接数目 limit_rate 现在每个请求的数据大小 limit_req 限 ...
- Nginx如何限流?
作者 | 雪山上的蒲公英 来源 | https://www.cnblogs.com/zjfjava/p/10947264.html 流量限制(rate-limiting),是Nginx中一个非常实用, ...
- nginx的限流配置
本文来说下nginx的限流配置 文章目录 概述 Nginx如何限流 配置基本的限流 处理突发 无延迟的排队 高级配置示例 location包含多limit_req指令 配置相关功能 发送到客户端的错误 ...
最新文章
- 无人驾驶岗平均月薪4.14万:因为稀缺,所以高薪
- Spring学习(三)Spring AOP 简介
- ic designer
- 查询学生选修课程管理系统java_JAVA数据库课程设计学生选课管理系统的
- Nginx(零):背景
- 机器学习笔记II: 决策树
- 2010伊始就这么忙
- python distance matrix_机器学习中的距离盘点
- 零基础学习嵌入式给出的10条中肯的建议
- 21个以Bootstrap为框架的WordPress免费主题模板下载
- 终极算法——第五章:进化学派:自然的学习算法
- vue基础----用vue来展示表格数据
- 计算机二级office高级应用知识点,2017年全国计算机二级考试MS Office高级应用知识点:电子邮件...
- bittorrent端口_如何在Linux防火墙中启用BitTorrent端口?
- 记录极致cms当前位置间隔符号替换
- Latex算法命令\REQUIRE和\ENSURE显示为Input:和Output:
- iOS导航控制器——UINavigationController使用详解
- 12AU7设计中的一个小技巧
- 计算机魔术教程文字,《Word字体魔术大师》说课稿
- SQuirreL SQL Client (小松鼠) 数据库连接工具