花时间重新梳理了一下,不同的时候,阅读就有不同的体会.
http段limit_req_zone $binary_remote_addr zone=one:10m rate=15r/s;
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
service 段limit_req zone=one burst=5 nodelay;
limit_conn perip 20;
limit_conn perserver 5000;
limit_rate 100k;
关于
limit_req_zone $binary_remote_addr zone=one:10m rate=15r/s;
速度可以设置为用户每秒处理请求数和每分钟处理请求数,其值必须是整数,所以如果你需要指定每秒处理少于1个的请求,2秒处理一个请求,可
以使用 “30r/m”limit_req_zone $binary_remote_addr zone=one:10m rate=15r/s;
server {
location /www.abc.com/ {
limit_req zone=one;
#limit_req zone=one burst=5;
#limit_req zone=one burst=5 nodelay;
}
}
配置段: http, server, location
限制平均每秒不超过15个请求,同时允许超过频率限制的请求数不多于5个。(最多允许5个请求排队)
如果不希望超过的请求被延迟,可以用nodelay参数,如果没有nodelay参数,那么最多burst个excessive请求则按rate参数规定的速率延迟发送给后
端。如果有nodelay参数,则表示这些excessive请求会立马发送给后端。所以这种情况下,后端请求到达的速率可能不止rate这么多。
limit_req zone=one burst=5 nodelay;
limit_req zone=one; 严格限制发送给Tomcat端请求的速率是一秒一个,多的立即503返回。
limit_req zone=one burst=5; 严格限制发送给Tomcat端请求的速率也是一秒一个,nginx会缓存5个excessive请求,按rate指定的速率,
一秒一个发给Tomcat。因此日志中这三个请求在37s、38s、39s、40s被处理,第一个请求与被503快速返回的请求处理时间点32s刚好差5s的接口响
应时间。
limit_req zone=one burst=5 nodelay; 五个请求有6个被接收处理了,多的两个按503返回了。这被处理的三个请求,第一个是按rate规定
发送给Tomcat,剩下5个属于excessive请求,在nodelay参数作用下,与第一个请求一起一并发给Tomcat。因此几乎同时到达Tomcat的请求有四个!
limit_conn perip 20;
limit_conn perserver 5000;
limit_rate 100k;
补充说明下参数:
$binary_remote_addr是限制同一客户端ip地址;
$server_name是限制同一server最大并发数;
limit_conn为限制并发连接数;
limit_rate为限制下载速度;
非特殊说明,本博所有文章均为博主原创。
最新文章