Nginx限制并发连接数

2018-08-10  本文已影响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个连接
        }
    }
}

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
        }
    }
}

参考值

Shell>netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
上一篇下一篇

猜你喜欢

热点阅读