1.既然依据ip做限制,那么可限制的一般有连接数、请求数、速率、带宽
2.nginx官方已经提供的有对应的模块,且默认是已经加载的,如果需要取消则--without-*,那么,模块具体信息如下:
http_limit_req_module 请求数限制
http_limit_conn_module 连接数限制
http_core_module
速率、带宽限制
http_map_module
以第一个变量值为条件,添加第二个自定义变量
http_geo_module
以客户端IP地址作为变量条件,添加第二个自定义变量
连接数和请求数限制可能有人会迷惑。这里解惑一下:一个页面可能存在多个图片,我们请求了这个页面,建立了链接,但是这个链接包含了10个请求(均是图片)。所以这两个模块结合起来比较好。
map和geo的目的在于设置限定范围,毕竟我们有时候需要针对某一个范围的ip进行限制,如仅对外网进行限制
3.模块解析:
>>http_limit_req_module
http上下文中,可做如下:
limit_req_zone $variable
zone=zone_name:num rate=numr/s;
limit_req_zone:固定格式
$variable:指的是对某个ip作出限定,此变量一般从$binary_remote_addr或者$remote_addr获取,当然也可以直接调用这两个变量
zone=zone_name:num:指定共享内存空间名和大小,比如说zone=req1:5m
rate=numr/s:指定请求速率,这里值只能是整数,比如说1r/s表示每秒最多1个请求,30r/m表示每分钟最多30个请求,也就是每秒最多2个请求
location上下文中,可做如下:
limit_req zone=zone_name
burst=num;
limit_req:固定格式
zone:设定共享内存空间名
burst:如果请求频率超出了http上下文中限定的速率,则指定允许超出多少,当然,这超出的部分会被延迟处
理。如果继续超出burst的限定值,则返回503错误
>>http_limit_conn_module
此模块基本和http_limit_conn_module一致
http上下文中,可做如下:
limit_conn_zone $variable zone=zone_name:num;
location上下文中,可做如下:
limit_conn zone_name num;
num:限定每秒连接数,并发
>>http_core_module
location上下文中,可做如下:
limit_rate_after
num;
限定使用多少带宽之后,再执行限速,如1m
limit_rate num;
限定具体速度,如100k,即限定100kb/s
>>http_map_module
http上下文中,可做如下:
map $var1 $var2 {
变量1的匹配项
变量2的值;
}
例1:依据一个具体数值,限定ip范围,当white为1时,则ip为请求的客户端ip
map $white $ip {
1
$binary_remote_addr;
}
例2:依据域名,赋值
map $host $value {
~test abc
}
>>http_geo_module
定义从指定的变量获取客户端的IP地址。默认情况下,nginx从$remote_addr变量取得客户端IP地址,但也可以从其他变量获得。
http上下文中,可做如下:
geo $var1 $var2 {
ip地址
变量2的值;
}
例1:依据ip地址,赋值给变量2。如果是来访客户端是127.0.0.1,则white为1,反之为0.
geo $white {
default 0;
127.0.0.1 1;
}
4.一个综合例子
http {
...
geo $white
{
default
0;
127.0.0.1
1;
}
map $white $limit {
0
$binary_remote_addr;
1 "";
}
limit_conn_zone $limit zone=conn:5m;
limit_req_zone $limit zone=req:5m rate=1r/s;
...
server {
...
location / {
root html;
index index.html
index.htm;
limit_conn conn 2;
}
...
}
}
测试:
加入限制前:客户端访问nginx的状态
加入限制后:客户端访问nginx的状态
nginx之依据IP做限制,布布扣,bubuko.com
nginx之依据IP做限制
原文:http://www.cnblogs.com/aaa103439/p/a49afb169c9f1ff5746a95d4bebc3fe5.html