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个连接
}
}
}
- 如果共享内存空间
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
,根据这个值进行请求数的限制