1. 程式人生 > >nginx ---- 配置請求頻率與連線次數

nginx ---- 配置請求頻率與連線次數

第一種限制:

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                必應蜘蛛
") 

可以結合下別的部落格看看,有些解釋不是很全面,像我自己使用的是第三種,正常使用中