美文网首页
Nginx限制并发连接数

Nginx限制并发连接数

作者: 猪蹄胖 | 来源:发表于2018-08-10 14:34 被阅读0次

    TCP连接

    对于一些服务器流量异常、负载过大,甚至是大流量的恶意攻击访问等,进行并发数的限制(共享内存和并发限制需结合系统定制)
    limit_conn_zone 设置共享内存区域参数

    Syntax: limit_conn_zone key zone=name:size;
    Default:    —
    Context:    http
    

    limit_conn 设置共享内存区域和给定键值的最大允许连接数

    Syntax: limit_conn zone number;
    Default:    —
    Context:    http, server, location
    

    limit_conn_log_level 日志可以调整级别,默认error

    Syntax: limit_conn_log_level info | notice | warn | error;
    Default:    
    limit_conn_log_level error;
    Context:    http, server, location
    #This directive appeared in version 0.8.18.
    

    limit_conn_status 返回状态码响应拒绝请求,默认503

    Syntax: limit_conn_status code;
    Default:    
    limit_conn_status 503;
    Context:    http, server, location
    #This directive appeared in version 1.3.15.
    

    示例

    http {
        limit_conn_zone $binary_remote_addr zone=perip:10m;
        limit_conn_zone $server_name zone=perserver:10m;
    server {
        location /download/ {
            limit_conn perserver 100;#虚拟服务同时只允许100个连接
            limit_conn perip 10;#每个IP同时只允许10个连接
            }
        }
    }
    
    • 如果共享内存空间20m被耗尽,服务器将会对后续所有的请求返回503 (Service Temporarily Unavailable)错误
    • 将限制每个客户机IP到服务器的连接数量,同时限制到虚拟服务器的连接总数:

    HTTP连接

    限制来自单个IP地址的请求处理频率,每秒固定处理请求数,推迟过多请求。以此来防止应用层的DDOS攻击(共享内存和请求频率需结合系统定制)
    limit_req_zone 设置共享内存区域参数

    Syntax: limit_req_zone key zone=name:size rate=rate;
    Default:    —
    Context:    http
    

    limit_req 设置共享内存区域、突发大小、延时

    Syntax: limit_req zone=name [burst=number] [nodelay];
    Default:    —
    Context:    http, server, location
    

    limit_req_log_level 日志可以调整级别,默认error

    Syntax: limit_req_log_level info | notice | warn | error;
    Default:    
    limit_req_log_level error;
    Context:    http, server, location
    #This directive appeared in version 0.8.18.
    

    limit_req_status 返回状态码响应拒绝请求,默认503

    Syntax: limit_req_status code;
    Default:    
    limit_req_status 503;
    Context:    http, server, location
    #This directive appeared in version 1.3.15.
    

    示例

    http {
        limit_req_zone $binary_remote_addr zone=ten:10m rate=100r/s;
        limit_req_zone $server_name zone=perserver:20m rate=1000r/s;
    server {
        location /search/ {
            limit_req zone=ten burst=500 nodelay; #每秒100个请求,突发不超过500个请求,降低延时请求
            limit_req zone=perserver burst=2000; #虚拟服务同时每秒1000个请求,突发不超过2000
            }
        }
    }
    
    • 如果不希望在请求受到限制时延迟过多的请求,加入参数nodelay
    • 当且仅当当前级别上没有limit_req指令时,这些指令才从上一级别继承
    • 同时可以有几个limit_req指令

    参考值

    • Nginx服务器上查看ESTABLISHED的连接数,根据这个连接数来限制tcp连接
    Shell>netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
    
    • Web浏览器查看nginx服务器的Req/s,根据这个值进行请求数的限制

    相关文章

      网友评论

          本文标题:Nginx限制并发连接数

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