码迷,mamicode.com
首页 > 其他好文 > 详细

Nginx 限速

时间:2020-06-29 11:17:28      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:官网   name   允许   队列   模块   time   时间   roo   dex   

限制并发连接数量

ngx_http_limit_conn_module,可以根据设定的条件来限定客户端(单一ip)的并发访问,但是并不是所有的访问都会被计数,
只有那些正在被处理的的请求(这些请求的头信息已被完全读入),所在的访问才会被计数。

例子:

...
http {
...
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    server {
        listen       80;
        server_name  localhost;
        location / {
            limit_conn addr 1;
            proxy_pass http://127.0.0.1:8001/cur_time;
            root   html;
            index  index.html index.htm;
        }

    }
}

1) limit_conn_zone $binary_remote_addr zone=addr:10m;
第一个参数 $binary_remote_addr:表示以客户端 ip 作为键值来进行限制
第二个参数 zone=addr:10m:表示生成一个大小为10M,名字为 addr 的存储区域,用来存储访问次数

2) limit_conn addr 1;
表示在 addr 存储区内,限制客户端 ip 只能访问一次,若超过访问限制,则返回503错误。

注意,在使用 ab 对该模块进行测试时发现,若服务器立即返回,如简单的 html 页面,则 ngx_http_limit_conn_module 模块没有达到预想效果,若是一个需要经过后端处理的才返回的页面则生效,在上面的例子中,我写了一个延迟 5s 再从后端返回当前服务器时间的页面 http://127.0.0.1:8001/cur_time,则可以测出效果
官网参考文档:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

限制请求速度

ngx_http_limit_req_module,可以根据设定的条件来限定客户端(单一ip)的访问频率。

例子:

...
http {
...
    limit_req_zone  $binary_remote_addr  zone=two:10m   rate=5r/s;

    server {
        listen       80;
        server_name  localhost;
        location / {
            limit_req zone=two burst=3 nodelay;
            proxy_pass http://127.0.0.1:8001/cur_time;
            root   html;
            index  index.html index.htm;
        }

    }
}

1) limit_req_zone  $binary_remote_addr  zone=two:10m   rate=5r/s;
第一个参数 $binary_remote_addr:表示以客户端 ip 作为键值来进行限制, 访问的IP被转为2进制存放,10兆的内存可以存放16,0000个IP地址。
第二个参数 zone=two:10m :表示生成一个大小为10M,名字为two的存储区域,用来存储访问频率
第三个参数 rate=5r/s:表示限定客户端的访问频率为每秒5次

2) limit_req zone=two burst=3 nodelay;
第一个参数 zone=two:表示使用存储区域 two 来限制
第二个参数 burst=5:表示设定一个缓存区域,当有大量请求时,超过了访问频次限制的请求会放在这个缓冲区域内
第三个参数 nodelay:表示当超过访问次数并缓冲也满的情况下,直接放回503错误,若不设置,这些多余的请求会延迟处理

设置Nginx、Nginx Plus的连接请求在一个真实用户请求的合理范围内。比如,如果你觉得一个正常用户每两秒可以请求一次登录页面,
你就可以设置Nginx每两秒钟接收一个客户端IP的请求(大约等同于每分钟30个请求)。
如果这些IP访问超过了 rate 限制并且溢出了 burst 所限大小的队列,就会触发 503 错误。

注意:nginx 的限流统计是基于毫秒的,设置的速度是 5r/s,转换一下就是 200ms内单个IP只允许通过一个请求,从201ms开始才允许通过第二个请求。 

官网参考文档:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

Nginx 限速

标签:官网   name   允许   队列   模块   time   时间   roo   dex   

原文地址:https://www.cnblogs.com/klvchen/p/13206483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!