Stan Blog

學習過程中的一些記錄

[Nginx] Rate Limit Whitelist

最近有個需求必須爬主站文章到活動網站

但因主站有設置 rate limit,連續打太多 request 會被導至 503

可想而知… 爬蟲就被拒於門外了

這時要在主站 nginx whitelist 裡加入爬蟲的 ip

http {
 geo $whiteiplist  {
 default 1;
 127.0.0.1 0;
 10.0.0.0/8 0;
 121.207.242.0/24 0;
 }

 map $whiteiplist  $limit {
 1 $binary_remote_addr;
 0 "";
 }

 limit_conn_zone $limit zone=limit:10m;

 server {
        listen       8080;
        server_name  test.ttlsa.com;

        location ^~ /ttlsa.com/ {
                limit_conn limit 4;
                limit_rate 200k;
                alias /data/www.ttlsa.com/data/download/;
        }
 }
}

geo 指令內定義 $whiteiplist。預設值為 1

0 才是通過白名單

map 指令將 $whiteiplist 值為 1 的,mapping 為 $binaryremoteaddr; 將 $whiteiplist 值為 0 的,也就是白名單 IP,mapping 為空字串

limitconnzone 對於空值會忽略,進而達到白名單效果


Ref:

Comments

comments powered by Disqus