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

2018/12 02 01:12

第一种限制:

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:

192.168.0.187 1;
192.168.0.188 0;
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没有经过配置的话,就会被赋默认值 1192.168.0.187 1,然后你访问的频率就会受到限制了

第三种:搜索引擎的服务器太多,ip限制不过来,通过useragent限制

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;

        }
    }

}
一些蜘蛛:
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                必应蜘蛛
") 

可以结合下别的博客看看,有些解释不是很全面,像我自己使用的是第三种,正常使用中

--转载请注明: http://91o.cc/nginx-%e9%85%8d%e7%bd%ae%e8%af%b7%e6%b1%82%e9%a2%91%e7%8e%87%e4%b8%8e%e8%bf%9e%e6%8e%a5%e6%ac%a1%e6%95%b0/

发表回复

(必填)