利用Nginx user_agent 屏蔽指定爬虫实现跳转

今天老蒋遇到网友一个网站负载比较大,然后通过日志看到有乱七八糟的爬虫在抓取。如果我们需要设置的话,可以通过一些CDN前端过滤也是可以的,同时,我们可以用Nginx设置过滤爬虫,比如用到user_agent(UA)进行过滤。在这里简单的整理几个常用的UA过滤办法。

#禁止Scrapy等爬虫工具的抓取
if ($http_user_agent ~* "Scrapy|Sogou web spider") {
  return 403;
}
#禁止指定UA及UA为空的访问
if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms|^$" )
{
  return 403;
}
#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
  return 403;
}

我们可以直接单独加到当前站点的conf文件中,或者是建立一个单独的过滤.conf文件,然后在当前站点配置中引用。

我们还可以针对特殊的UA进行过滤。

if ($http_user_agent ~ "Mozilla/4.0\ \(compatible;\ MSIE\ 6.0;\ Windows\ NT\ 5.1;\ SV1;\ .NET\ CLR\ 1.1.4322;\ .NET\ CLR\ 2.0.50727\)") { 
   return 404;
}

比如直接那日志中看到的UA过滤。

我们还可以利用UA过滤不同的设备跳转,这个就是我们很多时候在不同设备打开某些网站跳转不同的页面都用这个控制的。

if ( $http_user_agent ~* "(iPhone|iPad|iPod|iOS|Android|Mobile|nokia|samsung|htc|blackberry)") {
            set $client "1";
          }        
        if ($client = '1') {
              proxy_pass http://111.com;
              break;
        }
        if (!-f $request_filename) {
              proxy_pass http://222.com;
               break;
        }

我们可以根据灵活需要进行Nginx过滤。

本文出处:老蒋部落 » 利用Nginx user_agent 屏蔽指定爬虫实现跳转 | 欢迎分享( 公众号:老蒋玩运营 )