nginx limit_req限速设置

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 }
时间: 2024-10-17 15:09:28

nginx limit_req限速设置的相关文章

NGINX httplimitreq 限速设置

WIKI: http://wiki.nginx.org/HttpLimitReqModule 漏桶原理(leaky bucket): http://en.wikipedia.org/wiki/Leaky_bucket #以用户二进制IP地址,定义三个漏桶,滴落速率1-3req/sec,桶空间1m,1M能保持大约16000个(IP)状态 limit_req_zone  $binary_remote_addr  zone=qps1:1m   rate=1r/s; limit_req_zone  $b

利用nginx“ngx_http_referer_module”模块设置防盗链

ngx_http_referer_module模块允许拦截"Referer"请求头中含有非法值的请求,阻止它们访问站点. 需要注意的是伪造一个有效的"Referer"请求头是相当容易的, 因此这个模块的预期目的不在于彻底地阻止这些非法请求,而是为了阻止由正常浏览器发出的大规模此类请求. 还有一点需要注意,即使正常浏览器发送的合法请求,也可能没有"Referer"请求头. 语法:  valid_referers none | blocked | s

nginx多站点设置

如无实际生产环境(域名),可以修改本地host文件,将两个域名指向这个服务器,对两个域名进行访问. nginx多站点设置: 试验环境:CentOS6.5 64bit   lnmp nginx配置文件目录:/usr/local/webserver/nginx/conf 这里,我使用多个配置文件的方式进行配置: 修改nginx.conf文件内容,去除所有server段的代码, 增加最后一行include 站点配置文件目录 http { include       mime.types; defaul

nginx 下载限速,防盗链

学习nginx中在网上遇到这些功能点特记之 NGINX下载限速: 先在 http 区段找到 limit_zone,再把注释拿掉~# 设定一个叫做 crawler 的区域,大小为 20MB limit_zone crawler $binary_remote_addr 20m 然后在 server 的区段加上 # 限制档案类型只能单线下载 location ~ .*\.(zip|rar|gz|tar|exe|mp3|flv|swf|jpg|jpeg)$ { limit_conn crawler 1;

nginx证书的设置

nginx证书的设置 listen 80listen 443;server_name langba888.com www.langba888.com;ssl on; #为一个server开启ssl支持 ssl_certificate /etc/nginx/crt/server.crt; #为虚拟主机指定pem格式的证书文件 ssl_certificate_key /etc/nginx/crt/server.key; #为虚拟主机指定私钥文件 ssl_session_timeout 5m; #客户

nginx实现限速

项目中有一个需求,需要限制每个容器的网速,避免某些容器占用太多资源,导致其他容器无法使用,但是docker对于网速的限制支持的有点弱,由于容器中的所有进程和APP的交互都是通过nginx的,所以就想到能不能用通过nginx来限速,那就是limit_rate指令,详细文档参考:http://nginx.org/en/docs/http/ngx_http_core_module.html#limit_rate 自测步骤: 1.测试未添加limit_rate指令前的速度: 由于是在一台低配版的阿里云服

nginx网站限速限流配置——网站被频繁攻击,nginx上的设置limit_req和limit_conn

利用ngx_http_limit_req_module模块,可根据键值(如ip)限制每分钟的速率: limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 "leaky bucket"  , http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html limit_req_conn 用来限制同一时间连接数,即并发限制  http://nginx.org/en/docs/http/ngx_http

Nginx下载限速

Nginx可以通过HTTPLimitZoneModule和HTTPCoreModule两个模块来实现对目录和IP进行下载限速. 先来一个配置示例看下: limit_zone one $binary_remote_addr 10m; server  {  listen       80; server_name  test.361way.com; location / { root   /var/www/html; index  index.html index.htm index.php; au

linux下Nginx配置文件(nginx.conf)配置设置详解(windows用phpstudy集成)

linux备份nginx.conf文件举例: cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf-20171111(日期) 在进程列表里 面找master进程,它的编号就是主进程号. ps -ef | grep nginx 查看进程 cat /usr/local/nginx/nginx.pid 每次修改完nginx文件都要重新加载配置文件linux命令: /usr/local/nginx -t //验证配置文件是否合法 若ngin