参数说明
$binary_remote_addr是同一客户端IP IP地址用二进制来储存客户端的地址,1m 可以储存 32000 个并发会话;
$server_name是同一server最大并发数;(虚拟主机如:www.aaa.com就是一个虚拟主机)
limit_conn_zone 用来限制同一时间连接数,即并发限制,限制并发连接数;
limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 “leaky bucket” ,限制下载速率;
limit_rate 用来限制下载速度
控制nginx并发连接数
定义内存区
limit_conn_zone key zone=name:size;
上下文http内
设置共享内存区域key可以是字符串,nginx自有变量或前两个组合,如binaryremoteaddr, binary_remote_addr,binary
remote addr,server name name为内存区域的名称,size为内存区城的大小。
在server标签的location内做限制
limit_conn zone number;
zonename是定义的内存区域名称 number是指最大连接数,当超过最大连接数,服务器返回503错误
例:
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
}
location / {
limit_conn addr 10; #限制单ip的最大并发连接数为10
}
以下功能可以用于服务器下载(限制BT下载)
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
}
location /download/ {
limit_conn addr 1;
}
限制虚拟主机总连接数
limit_conn_zone $server_name zone=perserver:10m; #http标签中
limit_conn perserver 100; #location标签中
例:
http {
limit_conn_zone $server_name zone=perserver:10m;
}
location / {
limit_conn perserver 100; #限制同一server(虚拟主机)最大并发数
}
控制nginx用户请求速率
上下文http内
limit_req_zone $binary_remote_addr zone=reqlist:10m rate=1r/s;
以请求的客户端ip作为key值,内存区域命名为reqlist,分配10m内存空间,访问速率限制每秒1次请求request
在server标签的location内做限制
limit_req zone=reqlist burst=5 nodelay;
使用前面定义的名为reqlist的内存空间,队列值为5,即可以有5个请求排队等待。nodelay字面的意思是不延迟,具体说是对用户发起的请求不做延迟处理,而是立即处理. 真正对限流起作用的配置就是rate=1r/s和burst=5这两个配置
例:限制远端同一个IP地址每秒访问次数
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/s;
}
location / {
limit_req zone=one burst=5 nodelay;
}
例2 限制一个虚拟主机(如www.aaa.com)每秒允许被访问的速率
http {
limit_req_zone $server_name zone=one:10m rate=30r/s;
}
location / {
limit_req zone=one burst=5 nodelay;
}
控制nginx用户下载速度
location ^~ /videos/ {
…
limit_rate_after 10m;
limit_rate 150k;
…
}
第一个指令limit_rate_after,从下载到你指定的文件大小之后开始限速,然后第二个指令limit_rate,设置最高下载速度。
要注意的是上面的设置是限制的是每一个连接的下载速度,所以如果一个用户打开了多个连接下载,那么它的下载速度就能达到单个连接的限速乘以连接数。不过我们可以使用limit_conn_zone和limit_conn这两个指令限制其连接数。
限制同一个ip的连接数和下载速度 用于服务器下载(限制BT下载)
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
}
location /download/ {
limit_conn addr 1;
limit_rate_after 10m;
limit_rate 150k;
}
(责任编辑:IT) |