Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1248717
  • 博文数量: 1096
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 11060
  • 用 户 组: 普通用户
  • 注册时间: 2018-03-07 15:17
个人简介

linux工程师,RHCE

文章分类

全部博文(1096)

文章存档

2023年(84)

2022年(314)

2021年(251)

2020年(244)

2019年(176)

2018年(27)

我的朋友

分类: LINUX

2019-03-08 11:15:28

参数说明
$binary_remote_addr是同一客户端IP IP地址用二进制来储存客户端的地址,1m 可以储存 32000 个并发会话;
$server_name是同一server最大并发数;(虚拟主机如:就是一个虚拟主机)
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 
r

 emote 
a

 ddr,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 限制一个虚拟主机(如)每秒允许被访问的速率
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;
}
--------------------- 
若你不了解Nginx,我建议你去读一下《Linux就该这么学》这本引领你打开知识之门的书,你一定会收获甚多。
阅读(1215) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~