前言

在当今流量徒增的互联网时代,很多业务场景都会涉及到高并发。这个时候接口进行限流是非常有必要的,而限流是Nginx最有用的特性之一。

一般情况下,首页的并发量很大,即使应用了多级缓存,用户不停的刷新网站也是没有必要的,甚至有些恶意的请求也会对系统造成影响。

其作用可以防止用户恶意刷爆网站,控制并发量。

nginx 主要实现限流的两个模块:

  • 控制速率
  • 控制并发量

控制速率

limit_req_zone $binary_remote_addr zone=myRateLimit:10m rate=2r/s;
  • $binary_remote_addr — 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址。简单的来看这就是固定写法
  • zone=myRateLimit:10m — 表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息。相当于定义空间
  • rate=2r/s — 表示允许相同标识的客户端的访问频次,这里限制的是每秒2次,还可以有比如30r/m的。

使用:

  location / {#限流limit_req zone=myRateLimit;root   html;index  index.html index.htm;}

limit_req 还有其他参数,可以使得限流模块优化

处理流量突刺(Bursts)

对于他的理解就是,bursts定义了一个队列,这个队列有数量限制,=5,就是在当第一个请求被处理是,接下里的控制时间(速率定义)内的5个请求可以被存储在队列中,如果超过这个队列就会返回503

无延迟排队(nodelay)

带有burst的配置产生平滑的网络流量,但是不实用,因为该配置会使得你的网站表现的很慢。因为在控制时间内(很短)等待的其他请求,可能已经失去了他的意义,不需要再去响应他。而nodelay就是为了解决这个存在

所以Bursts一般都是与nodelay一起使用

下面是优化写法

  location / {limit_req zone=myRateLimit burst=5 nodelay;root   html;index  index.html index.htm;}
  • zone=one 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应。
  • burst=5,重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。
  • nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队。

控制并发量(imit_conn_zone)

用来限制同一时间连接数,即并发限制。这与上面的每秒连接次数不同,这个主要针对并发处理。即,当有定的用户并发请求时,我们可以控制并发个数,拒绝不合理并发量请求

    # 根据IP进行限流# limit_conn_zone $binary_remote_addr zone=addr:1m;#存储个人请求IP的限流容量# limit_conn_zone $binary_remote_addr zone=perip:10m;#整个location对应的请求的并发量配置# limit_conn_zone $server_name zone=perserver:10m;

实现

 location /brand{#limit_conn addr 5;#limit_conn perip 3;#limit_conn persrver 10;proxy_pass http://192.168.0.104:8081;}

nginx 限流学习相关推荐

  1. Nginx源码研究之nginx限流模块详解

    这篇文章主要介绍了Nginx源码研究之nginx限流模块详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 高并发系统有三把利器:缓存.降级和限流: 限流的目的是通过对并 ...

  2. sql server 配置管理器里为什么是32位_死磕 Nginx 系列:Nginx 限流配置

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 限流算法:令牌桶算法 算法思想是: 令牌以固定速率产生,并缓存到令牌桶中: 令牌桶放满时,多余的令牌被丢弃: 请求要消耗等比例的令牌才能被处 ...

  3. Redis实现分布式限流(学习笔记

    Redis实现分布式限流(学习笔记2022.07.09) 前言: 以下实现都是基于: spring-boot-starter-web + spring-boot-starter-data-redis ...

  4. 一文搞懂Nginx限流(简单实现)

    Nginx现在已经是最火的负载均衡之一,在流量陡增的互联网面前,接口限流也是很有必要的,尤其是针对高并发的场景.Nginx的限流主要是两种方式:限制访问频率和限制并发连接数. 限流(rate limi ...

  5. nginx 限流,以及nginx直接返回json格式数据

    2019独角兽企业重金招聘Python工程师标准>>> 高并发系统有三把利器用来保护系统:缓存.降级和限流 今天我们这里说说限流.一般会在应用层配合redis做限流策略,这里我们聊聊 ...

  6. NGINX限流的一些思考

    来源:http://blog.csdn.net/soar_away/article/details/51980247 我们经常遇到这种情况, 服务器资源有限,但是客户端来的请求在不断的上涨, 为了保证 ...

  7. nginx限流以及配置管理

    nginx限流以及配置管理 nginx限流 限制并发连接数 http状态码 限制相同客户端的访问频次 burst nodelay limit_rate限制带宽 nginx配置管理 自动索引 expir ...

  8. 高并发解决方案之“Nginx限流”

    本文将分4个步骤讲解: 1.api压力测试 2.查看api响应性能 3.nginx限流进行优化 4.查看优化结果 1 api压力测试 1.1 安装压测工具 yum -y install httpd-t ...

  9. Nginx 限流方法

    Nginx 限流方法 运维猿 2018-10-23 17:25:31 限流(rate limiting)是Nginx众多特性中最有用的,也是经常容易被误解和错误配置的,特性之一.该特性可以限制某个用户 ...

最新文章

  1. R缺失值识别、过滤、填充(中位数、KNN、随机森林)
  2. Linux下rgmii接口,zynq7010 petalinux 2019.2 RGMII via EMIO 连接问题
  3. mysql 创建date,在MySQL中从DATE和TIME创建DATETIME?
  4. android 过滤格式,android Intent.setType() 过滤图片,返回所有的文件类型
  5. 使用iostat分析IO性能
  6. (转载)Using GCC’s C++ Compiler
  7. 【三分钟刷一题力扣】移除元素
  8. springMVC解析视图
  9. vba 不等于_EXCEL中VBA基础语句(1)
  10. oracle中的判断大小,sql语句判断大小
  11. 前端学习(3147):react-hello-react之getBeforeUpdate
  12. 如履薄冰 —— Redis懒惰删除的巨大牺牲
  13. c json保存整型数组_命令行JSON解析神器jq
  14. Java中提取字符串中的数字
  15. Visual Studio 2012 Ultimate旗舰版序列号
  16. How to update a module
  17. ArrayList类的使用方法
  18. 《麻省理工公开课:线性代数》中文笔记来了!
  19. ORACLE中通过SQL语句(alter table)来增加、删除、修改字段
  20. 4月8日链家考试感想

热门文章

  1. Miui 11备份文件的路径
  2. 十二届全国计算机学奥赛答案,十三届信息学奥赛初赛试题及答案(PASCAL 普及).pdf...
  3. docker上启动nginx,并配置修改nginx的配置文件 nginx、挂载文件、docker容器中文乱码
  4. edp和lvds区别
  5. 让 Homekit 不再鸡肋,树莓派、 Homebridge 、AC86U 的 Mixture!
  6. 科研项目申请、经费还未收到就被抄袭!
  7. 干货收藏|百万UP主都在用的创作小帮手
  8. reg51.h是什么意思?
  9. PS学习之餐饮行业修图
  10. css设置背景图片可滚动样式