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 必应蜘蛛
|