• Nginx 限速


    限制并发连接数量

    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

  • 相关阅读:
    进程线程模型
    操作系统运行机制
    操作系统概论
    排序
    win32消息机制
    win32框架
    map
    deque & list
    vector内部实现2
    蓝桥杯 文化之旅 图论 待复习
  • 原文地址:https://www.cnblogs.com/klvchen/p/13206483.html
Copyright © 2020-2023  润新知