今天正好是五一假期 记录一下前几天关于开发中遇到的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的白名单配置相关推荐

  1. 2.Nginx实现负载均衡、限流、缓存、黑白名单和灰度发布

    Author:Young Date:2020-07-22 参考链接: https://maimai.cn/article/detail?fid=1499586218&efid=7sV_7ICG ...

  2. Nginx之原理,限流,日志切割,正反代理,HTTPS配置

    文章目录 1 Nginx原理 1.1 Nginx怎么处理请求 1.2 Nginx是如何实现高并发 1.3 Nginx高可用性怎么配置 1.4 为什么Nginx不使用多线程 1.5 Nginx动态资源. ...

  3. 轻松两步,我在 SpringBoot 服务上实现了接口限流

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视 ...

  4. Nginx之——负载均衡、限流、缓存、黑名单和灰度发布

    转载请注明出处:https://blog.csdn.net/l1028386804/article/details/90523813 一.Nginx安装(基于CentOS 6.5) 1.yum命令安装 ...

  5. Nginx 实现负载均衡、限流、缓存、黑白名单和灰度发布,这是最全的一篇了!

    Nginx]实现负载均衡.限流.缓存.黑白名单和灰度发布,这是最全的一篇了! Nginx安装 注意:这里以CentOS 6.8服务器为例,以root用户身份来安装Nginx. 1.安装依赖环境 yum ...

  6. nginx域名访问的白名单配置梳理

    在日常运维工作中,会碰到这样的需求:设置网站访问只对某些ip开放,其他ip的客户端都不能访问.可以通过下面四种方法来达到这种效果: 1)针对nginx域名配置所启用的端口(比如80端口)在iptabl ...

  7. nginx 限流模块和fail2ban搭配使用

    ngnix的限流模块主要有三个: limit_conn 限制某个ip的tcp连接数目或者限制某个server(网站)整体的连接数目 limit_rate 现在每个请求的数据大小 limit_req 限 ...

  8. Nginx如何限流?

    作者 | 雪山上的蒲公英 来源 | https://www.cnblogs.com/zjfjava/p/10947264.html 流量限制(rate-limiting),是Nginx中一个非常实用, ...

  9. nginx的限流配置

    本文来说下nginx的限流配置 文章目录 概述 Nginx如何限流 配置基本的限流 处理突发 无延迟的排队 高级配置示例 location包含多limit_req指令 配置相关功能 发送到客户端的错误 ...

最新文章

  1. 无人驾驶岗平均月薪4.14万:因为稀缺,所以高薪
  2. Spring学习(三)Spring AOP 简介
  3. ic designer
  4. 查询学生选修课程管理系统java_JAVA数据库课程设计学生选课管理系统的
  5. Nginx(零):背景
  6. 机器学习笔记II: 决策树
  7. 2010伊始就这么忙
  8. python distance matrix_机器学习中的距离盘点
  9. 零基础学习嵌入式给出的10条中肯的建议
  10. 21个以Bootstrap为框架的WordPress免费主题模板下载
  11. 终极算法——第五章:进化学派:自然的学习算法
  12. vue基础----用vue来展示表格数据
  13. 计算机二级office高级应用知识点,2017年全国计算机二级考试MS Office高级应用知识点:电子邮件...
  14. bittorrent端口_如何在Linux防火墙中启用BitTorrent端口?
  15. 记录极致cms当前位置间隔符号替换
  16. Latex算法命令\REQUIRE和\ENSURE显示为Input:和Output:
  17. iOS导航控制器——UINavigationController使用详解
  18. 12AU7设计中的一个小技巧
  19. 计算机魔术教程文字,《Word字体魔术大师》说课稿
  20. SQuirreL SQL Client (小松鼠) 数据库连接工具

热门文章

  1. ExtendSim软件中使用脚本 自动建模
  2. 计算机考研人数翻番背后,中国考研人数五年翻一番,考研人数为啥增加了那么多?...
  3. Unity游戏Server放在云服务器上
  4. 电路设计100个小技巧
  5. EBSD的具体功能及样品制备
  6. 如何让企业用好云?亚马逊云科技助力云管理服务商加速成长
  7. 基于聚宽数据JQData的沪深300股指期货贴水现象简析
  8. 玩转你的86400秒
  9. 计算机网络组成原理概述概述
  10. 宝塔-如何部署自己的nodejs项目并跑起来【已解决】