-http字段中配置
#limit_conn_zone:限制并发连接数,即同一时间连接数
#设置一个自定义名字(perip),大小为10M的缓存空间,$binary_remote_addr表示以每个IP地址来限制
limit_conn_zone $binary_remote_addr zone=perip:10m;
#设置一个自定义名字(perserver),大小为10M的缓存空间,$server_name表示以server来限制
limit_conn_zone $server_name zone=perserver:10m;
-在需要 限制并发数 和 下载带宽 的网站配置 server {}里加上如下代码:
limit_conn perip 2; #每个ip的并发连接数
limit_conn perserver 20; #server总并发连接数
limit_rate 1024k;#限制下载速度;
-limit_req_zone:限制单位时间内的请求数
#设置一个自定义名字(perip),大小为10M的缓存空间,每个IP地址,每秒接受1个请求
limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
-设置一个自定义名字(perserver),大小为10M的缓存空间,server,每秒接受10个请求
limit_req_zone $server_name zone=perserver:10m rate=10r/s;
-server的location字段配
location / {
limit_conn addr 1; # 一次只允许每个IP地址一个连接。
# 单个IP的请求数,burst:缓冲队列的长度,最多允许5个突发请求的到来,
# nodelay:大于缓冲长度的將直接503,不设置nodelay则会排队等待
limit_req zone=perip burst=5 nodelay;
limit_req zone=perserver burst=10; #总请求数
}
-补充说明下参数:
$binary_remote_addr是限制同一客户端ip地址;
$server_name是限制同一server最大并发数;
limit_conn为限制并发连接数;
limit_rate为限制下载速度;
limit_zone: 是针对每个IP定义一个存储session状态的容器.
这个示例中定义了一个10m的容器,按照32bytes/session, 可以处理320000个session。
limit_conn perip 1:限制每个IP只能发起一个并发连接。
limit_rate 100k: 对每个连接限速100k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate×2。http {
# 限速IP白名单
geo $limit {
default 1;
10.0.0.0/8 0;
192.168.0.0/24 0;
172.20.0.35 0;
}
# 白名单不限速,非白名单按照客户端IP限速
map $limit $limit_key {
0 "";
1 $binary_remote_addr;
}
limit_conn_zone $server_name zone=perserver:10m;
limit_req_zone $server_name zone=perserverreq:10m rate=10r/s;
limit_conn_zone $limit_key zone=perip:10m;
limit_req_zone $limit_key zone=two:10m rate=2r/s;
limit_req_zone $limit_key zone=one:10m rate=1r/s;
...
server {
...
# 限制每个网站每秒不超过10个请求,突发不超过10个请求。
limit_req zone=perserverreq burst=10;
# 限制每个网站最多接受100个请求
limit_conn perserver 100;
# 限制每个IP能够最多建立10个请求
limit_conn perip 10;
# 限制每个IP每秒不超过1个请求,突发不超过3个请求。
limit_req zone=one burst=3 nodelay;
location /search/ {
# 限制每个IP每秒不超过1个请求。
limit_req zone=one;
}
location /download/ {
# 限制每个IP只能建立一个连接
limit_conn perip 1;
# 当请求的流量超500KB后进行限速
limit_rate_after 500k;
# 限速 50KB/s
limit_rate 50k;
}
}
}进行压力测试: ab -c 2 -t 1 http://192.168.0.61/lwj/index.html
签名:这个人很懒,什么也没有留下!