0%

nginx-配置请求频率与连接次数

nginx-配置请求频率与连接次数

今天在统计nginx日志中,url访问频率的时候,发现一个接口访问次数远远大于其他的url。于是用tail -f查看实时日志,发现有个ip以每秒3-4次请求这个url。询问开发后,得知是第三方调用的,频率有点高,需要限制一下

NginxHttpLimitConnModule
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
http {

#$limit_conn_zone:限制并发连接数
limit_conn_zone $binary_remote_addr zone=one1:10m;

#limit_req_zone:请求频率
#$binary_remote_addr:以客户端IP进行限制 ;
#zone=one:10m:创建IP存储区大小为10M,用来存储访问频率 ;
#rate=5r/s:表示客户端的访问评率为每秒5次
limit_req_zone $binary_remote_addr zone=one2:10m rate=10r/s;

server {
listen 80;
server_name 0.0.0.0;

location /{
#限制并发数2
limit_conn one1 2;

#burst:如果请求的频率超过了限制域配置的值,请求处理会被延迟。
#nodelay:超过频率限制的请求会被延迟,直到被延迟的请求数超过了定义的阈值,这个请求会被终止,并返回503
limit_req zone=one2 burst=10 nodelay;
}
}
限制IP

添加配置文件ip.config:

1
2
192.168.0.187 1;
192.168.0.188 0;

nginx.conf配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
http {

# geo:指令定义了一个白名单$limited变量,默认值为1,如果客户端ip在上面的范围内,$limited的值为0
geo $limited{
default 1;
include ip.config;
}

#geo $limited{
# default 1;
# 192.168.0.188 0;
#}

#使用map指令映射搜索引擎客户端的ip为空串,如果不是搜索引擎就显示本身真是的ip,
#这样搜索引擎ip就不能存到limit_req_zone内存session中,所以不会限制搜索引擎的ip访问
map $limited $limit {
1 $binary_remote_addr;
0 "";
}

limit_conn_zone $limit zone=one:20m;
limit_req_zone $limit zone=one2:20m rate=10r/s;

server {
listen 80;
server_name 0.0.0.0;

location /{
limit_conn one 2;
limit_req zone=one2 burst=10 nodelay;
}
}
}

当你访问的时候,你的IP会被捕获到,如果你的IP配置的是:192.168.0.187 0;那么你就将不会受到请求频率的限制。
相反,你的IP没有经过配置的话,就会被赋默认值 1 :192.168.0.187 1,然后你访问的频率就会受到限制了

UserAgent限制

nginx.conf配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
http {  
limit_req_zone $anti_spider zone=one1:10m rate=100r/s;
limit_req_zone $noanti_spider zone=one2:10m rate=5r/s;

server {
listen 80;
server_name 0.0.0.0;

# 可以百度一下 http_user_agent 和 爬虫
# 如果相等视他为正常爬虫 限制频率执行:$anti_spider 这一个配置
if ($http_user_agent ~* "EtaoSpider|EasouSpider|bingbot|AhrefsBot|qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver"){
set $anti_spider $http_user_agent;
}
# 不相等,恶意爬虫 限制频率执行 $noanti_spider 这一个配置
if ($http_user_agent !~* "EtaoSpider|EasouSpider|YoudaoBot|bingbot|AhrefsBot|qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver"){
set $noanti_spider $http_user_agent;
}

location /{
limit_req zone=one1 burst=10 nodelay;
limit_req zone=one2 burst=10 nodelay;

}
}

}

常见的蜘蛛UA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
AhrefsBot 
|360Spider 360蜘蛛
|qihoobot
|Baiduspider 百度蜘蛛
|Googlebot 谷歌蜘蛛
|Googlebot-Mobile 谷歌蜘蛛
|Googlebot-Image 谷歌蜘蛛
|Mediapartners-Google 谷歌蜘蛛
|Adsbot-Google 谷歌蜘蛛
|Feedfetcher-Google 谷歌蜘蛛
|Yahoo! Slurp 雅虎蜘蛛
|Yahoo! Slurp China 雅虎蜘蛛
|YoudaoBot 有道蜘蛛
|Sosospider SOSO蜘蛛
|Sogou spider SOSO蜘蛛
|Sogou web spider SOSO蜘蛛
|MSNBot MSN蜘蛛
|ia_archiver Alexa蜘蛛
|EtaoSpider 一淘网蜘蛛
|EasouSpider 宜sou蜘蛛
|bingbot 必应蜘蛛