美文网首页
nginx限流模块

nginx限流模块

作者: dark68 | 来源:发表于2021-05-30 17:42 被阅读0次

    1 限流

    主要是当访问量达到一个限制量的时候可以选择以服务器为主要,而选择对用户访问请求的量做限制,对于超出限制的用户请求会采取丢弃或者延迟处理等 方式处理,来保证更多用户来访问处理。

    比如:某一服务器正常在高峰期上能支持的访问量是1w,但是突然某一时刻在访问量上突然暴增一下子超过3w,5w则可能会导致服务器宕机,这个时候我们 就可以通过设置最大的访问如1分钟访问8000次。
    也可以防止攻击(对同一个ip每秒访问多少次)如:30min/次。

    对应模块
    ngx_http_limit_conn_module 限制连接数
    ngx_http_limit_reg_module 限制请求频率

    1.1 ngx_http_limit_reg_module限制请求频率

    http {
        limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
        ...
        server {
            ...
            location /search/ {
                limit_req zone=one burst=5;
            }
    }
    

    语法: limit_req zone=name [burst=number] [nodelay];
    语法: limit_req_zone $variable zone=name:size rate=rate;
    $variable:变量
    zone:代表当前限制的名称与存放大小
    name:名称
    size:存放客户端信息的大小
    rate:表示速率

    例子1: limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    zone=one 表示设置了名为“one”,大小为10兆字节,也可以理解为设置的限流名为one rate=10r/s 的意思是允许1秒钟不超过10个请求。

    使用$binary_remote_addr【这是一个二进制的信息记录 $remote_addr(非二进制的)】(nginx本身存在的,保存客户端的ip地址)变量,可以将每条状态记录的 大小减少到64个字节,这样1M的内存可以保存大约1万6千个64字节的记录。如果限制域的存储空间耗尽了,对于后续所有请求,服务器都会返回 503 (Service Temporarily Unavailable)错误。

    速度可以设置为每秒处理请求数和每分钟处理请求数,其值必须是整数,所以如果你需要指定每秒处理少于1个的请求,2秒处理一个请求,可以使用 “30r/m”。

    1.2 ngx_http_limit_conn_module限制请求连接数

    http {
        limit_conn_zone $binary_remote_addr zone=addr:10m;
        ...
        server {
            ...
            location /download/ {
                limit_conn addr 1;
            }
    }
    

    语法:limit_conn_zone $binary_remote_addr zone=addr:10m;
    说明:区域名称为addr,大小为10m,键值是客户端IP。 如果限制域的存储空间耗尽了,对于后续所有请求,服务器都会返回 503 (Service Temporarily Unavailable)错误。

    下载限速操作实例:

    http {
        # ....
        limit_conn_zone $binary_remote_addr zone=addr:10m;
        # .... 
        server { 
            location / { 
                # root html; 
                autoindex on; 
                # 是限制每个IP只能发起1个连接 (addr 要跟 limit_conn_zone 的变量对应) 
                limit_conn addr 1; 
                limit_rate 10k; #限速为 10KB/秒 
                root /redis_2004;
                # index index.html index.htm; 
            } 
        } 
    }
    

    相关文章

      网友评论

          本文标题:nginx限流模块

          本文链接:https://www.haomeiwen.com/subject/ycfdjltx.html