WIKI:

http://wiki.nginx.org/HttpLimitReqModule

漏桶原理(leaky bucket):

http://en.wikipedia.org/wiki/Leaky_bucket

实例:

01 #以用户二进制IP地址,定义三个漏桶,滴落速率1-3req/sec,桶空间1m,1M能保持大约16000个(IP)状态
02 limit_req_zone  $binary_remote_addr  zone=qps1:1m   rate=1r/s;
03 limit_req_zone  $binary_remote_addr  zone=qps2:1m   rate=2r/s;
04 limit_req_zone  $binary_remote_addr  zone=qps3:1m   rate=3r/s;
05  
06 server {
07  
08 #速率qps=1,峰值burst=5,延迟请求
09 #严格按照漏桶速率qps=1处理每秒请求
10 #在峰值burst=5以内的并发请求,会被挂起,延迟处理
11 #超出请求数限制则直接返回503
12 #客户端只要控制并发在峰值[burst]内,就不会触发limit_req_error_log
13 # 例1:发起一个并发请求=6,拒绝1个,处理1个,进入延迟队列4个:
14 #time    request    refuse    sucess    delay
15 #00:01        6        1        1            4
16 #00:02        0        0        1            3
17 #00:03        0        0        1            2
18 #00:04        0        0        1            1
19 #00:05        0        0        1            0
20 location /delay {
21     limit_req   zone=qps1  burst=5;
22 }
23  
24 #速率qps=1,峰值burst=5,不延迟请求
25 #加了nodelay之后,漏桶控制一段时长内的平均qps = 漏桶速率,允许瞬时的峰值qps > 漏桶qps
26 #所以峰值时的最高qps=(brust+qps-1)=5
27 #请求不会被delay,要么处理,要么直接返回503
28 #客户端需要控制qps每秒请求数,才不会触发limit_req_error_log
29 # 例2:每隔5秒发起一次达到峰值的并发请求,由于时间段内平均qps=1 所以仍然符合漏桶速率:
30 #time    request     refuse    sucess
31 #00:01         5         0          5
32 #00:05         5         0          5
33 #00:10         5         0          5
34 # 例3:连续每秒发起并发请求=5,由于时间段内平均qps>>1,超出的请求被拒绝:
35 #time    request     refuse     sucess
36 #00:01         5         0           5
37 #00:02         5         4           1
38 #00:03         5         4           1
39  
40 location /nodelay {
41     limit_req   zone=qps1  burst=5 nodelay;
42 }
43  
44 }

nginx limit_req限速设置的更多相关文章

  1. Nginx:Nginx limit_req limit_conn限速

    简介 Nginx是一个异步框架的Web服务器,也可以用作反向代理,负载均衡器和HTTP缓存,最常用的便是Web服务器.nginx对于预防一些攻击也是很有效的,例如CC攻击,爬虫,本文将介绍限制这些攻击 ...

  2. web服务器-Nginx下载限速

    web服务器-Nginx下载限速 一. 限速介绍 在生产环境中,为了保护WEB服务器的安全,我们都会对用户的访问做出一些限制,保证服务器的安全及资源的合理分配. 限流(rate limiting)是N ...

  3. nginx实现限速

    项目中有一个需求,需要限制每个容器的网速,避免某些容器占用太多资源,导致其他容器无法使用,但是docker对于网速的限制支持的有点弱,由于容器中的所有进程和APP的交互都是通过nginx的,所以就想到 ...

  4. nginx反向代理设置自定义错误页面

    为nginx反向代理设置自定义错误页面 转:https://blog.csdn.net/u014433030/article/details/77507839 如果我们的nginx配置了反向代理,如下 ...

  5. nginx https ssl 设置受信任证书[转然哥]

    nginx https ssl 设置受信任证书[原创] 1. 安装nginx 支持ssl模块 http://nginx.org/en/docs/configure.html yum -y instal ...

  6. nginx之日志设置详解

    nginx的日志设置 access_log access_log是服务器记录了哪些用户,哪些页面以及用户浏览器.ip和其他的访问信息:是一种非常详细的记录信息:如果我们不关心谁访问了我们,可以关闭: ...

  7. (转)Nginx反向代理设置 从80端口转向其他端口

    from :http://www.cnblogs.com/wuyou/p/3455381.html Nginx反向代理设置 从80端口转向其他端口   反向代理(Reverse Proxy)方式是指以 ...

  8. nginx的缓存设置提高性能

    对于网站的图片,尤其是新闻站, 图片一旦发布, 改动的可能是非常小的.我们希望 能否在用户访问一次后, 图片缓存在用户的浏览器端,且时间比较长的缓存. 可以, 用到 nginx的expires设置 . ...

  9. nginx目录安全设置

    nginx目录安全设置<pre> location ~ /\. { deny all; }</pre>这样所有隐藏文件都不会以URL方式打开了

随机推荐

  1. CSS-MUI:笔记-01

    ylbtech-CSS-MUI:笔记 1. mui-navbar   导航条返回顶部 1.1.样式一 1.2. <div class="mui-navbar-inner mui-bar ...

  2. JAVA方法中的参数用final来修饰的效果

    很多人都说在JAVA中用final来修饰方法参数的原因是防止方法参数在调用时被篡改,其实也就是这个原因,但理解起来可能会有歧义,我们需要注意的是,在final修饰的方法参数中,如果修饰的是基本类型,那 ...

  3. UE4模型导入基础教程

    转自:http://www.unrealchina.net/portal.php?mod=view&aid=290

  4. JAVA web 相关知识点

    1: web的三个核心标准: URL: http   VS  https HTTP:  通信协议,客户端/服务器端信息交互方式; 特点是无状态:                 HTML: 2: HT ...

  5. C# 获取图片某像素点RGB565值

    Project Source Download: http://download.csdn.net/detail/mostone/6360007 [csharp] view plain copy pu ...

  6. Celery-4.1 用户指南: Security (安全)

    简介 虽然Celery 编写的时候考虑了安全,但是它仍然应该认为是一个不安全的组件. 依据安全策略,你可以采取几个步骤使得你的 Celery 安装更加安全. 关注的领域 消息中间件 保障消息中间件不受 ...

  7. 2015.1.15 利用Oracle函数插入表结构 Bulk collect into 不用循环,简洁高效

    如果表结构只对应一个字段,可以 select col1 bulk collect into 变量,不用游标循环,简洁高效 create or replace function get_airway_s ...

  8. DevTools in Spring Boot 1.3

    Spring Boot 1.3 will ship with a brand new module called spring-boot-devtools. The aim of this modul ...

  9. 【265】shell文件创建链接

    优点:可以在其他文件夹内运行对应的*.sh文件,例如通过putty会默认进入的文件夹,可以将链接文件放在那里,就可以直接调用了! 方法:很简单 1. 在文件上点击右键>创建链接 2. 可以对下面 ...

  10. Oracle之DBMS_SQL包用法详解

    对于一般的(select)操作,如果使用动态的sql语句则需要进行以下几个步骤:open  cursor--->parse---> bind  variable  ---> defi ...