nginx的limit_req_zone使用和一些nginx杂项

转载自https://blog.csdn.net/shuixiou1/article/details/80165525

基于nginx的请求频率限制。

一、配置文件

#限速,每秒10个,内存区域10m,大概16万个session
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
server{
	listen 80;
	server_name xxx.xxx.xxx;
	location / {
		#缓存区队列burst=100个,不延期,即每秒最多可处理rate+burst个.同时处理rate个。
		limit_req zone=one burst=100 nodelay; 
		proxy_pass  http://service;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_intercept_errors on;
		proxy_connect_timeout 60;
		proxy_send_timeout 60;
		proxy_read_timeout 120; #长时操作的设置
	}
}

二、参数详解

    2.1 limit_req_zone的参数

    zone:one:10m 表示一个内存区域大小为10m,并且设定了名称为one.

    rate=5r/s 表示请求的速率是1秒5个请求,当单位设置成60r/m时,并不能达到限速1分钟60次的效果,它等同于1r/s。    

    $binary_remote_addr 表示远程的ip地址,当此nginx前方还存在代理时,需进行处理

    2.2 limit_req的参数

    zone=one  表示这个参数对应的全局设置就是one的那个内存区域

    burst=100 表示请求队列的长度。

    nodelay 表示不延时,比如rate=5r/s,burst=10 那么来了15个请求,能一次搞定,否则,就是此秒只能搞定5个请求。一般都是不延期的设置。

 三、burst详解及试验

     可以想象以下一个场景,某后台tomcat的最大单页请求是30个左右,那么难道我需要设定成30r/s的话,那么这个设置就意义不大了,而当然可以通过区分url进行分开设置,但是假如我不分开的话,通过burst也可以完成rate设置成5r/s,一个页面含有几十个请求的要求。

    初步假设是这样的,我第一秒有30个请求,后面每秒都是1-2个请求,rate=5r/s。

    注意这个速率是针对实时的请求或和burst中的5个请求(当一秒钟没有实时请求时,就从burst队列中移除5个)。

    因此,我把burst设置成200个(可以顶用户连续强制刷新大约10次)。第一次请求会刷静态请求,后面就不会请求静态的了,因此第一次一共会请求30个,其中实时的是5个,25个占用了burst的队列,虽然nodelay把这25个也处理了,但是队列中占用的25个位置需要5秒来清除,假如第二秒刷了2个请求,那么就会处理2个实时,并且队列清空3个位置,当队列满的时候,就会出现503的请求情况。

    验证效果,基本按上面的方式,连续每秒30个请求,即f5强制刷新,那么大约会再多少次后出现503的情况呢,答案大约是8次(200/25).

四、错误页面的设置

   在上面的server配置下,增加一个error_page ,配置一个loaction,注意这个用的是=/,它的优先级高于 /。因此不会去代理服务器找,直接就会再nginx下面的html找这个文件。

error_page 503 /error_503.html;
	location = /error_503.html{
	root   html;
}

 五、请求连接数的配置,配置的位置和请求数量一样

 limit_conn_zone $binary_remote_addr zone=one:10m;

 limit_conn  one  2;    #每个ip只能2个连接。

六、补充路径详解:

    格式 :   语法规则: location [=|^~|~|~*] /uri/ { … }

     #路径优先级 1. = /error.html  2.^~ /images/  3.  ~* \.(gif|jpg|jpeg|png|bmp|swf)$  4. /static/  5. /

    解释:1表示完整精确匹配,用=和完全的路径匹配,比如  =/error.html 就匹配 error.html  =/ 匹配根路径

             2表示开头等于,优先级第二,越长就越能匹配,比如^~ /abc/cd  ^~/abc 第一个会优先匹配/abc/cd/xxx

             3表示不区分大小的正则,并且正则中含义是.jpg等结尾的,优先级第三,同样正则越长越高。

             4表示开头等于/static/的,但是优先级比第二种低,是一种其他配置找不到再找它,越长就越能匹配。

             5因为4说了是越长越能匹配,当能匹配/static/就不会匹配/,而/是所有其他的一个默认匹配。

     特别补充比如:location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {  }//注意正则与其他符号要空格,其他一些配置也是如是。

 

可以参考一篇文章https://blog.csdn.net/hellow__world/article/details/78658041

nginx中limit_req_zone配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值