在nginx中將爬蟲過來的請求轉到指定的後端服務

一、前言

一般識別爬蟲的方法有兩種:

1、通過dnspod的方式

2、通過UserAgent,這種辦法最直接,但也很容易偽造。

二、配置方法

2.1、實現在nginx中使用map指令來匹配一個變量:

 map $http_user_agent $is_bot {
 default 0;
 ~[a-z]bot[^a-z] 1;
 ~[sS]pider[^a-z] 1;
 'Yahoo! Slurp China' 1;
 'Mediapartners-Google' 1;
 'YisouSpider' 1;
 }

在這裡我們生成了一個名為 $is_bot 的變量,該變量默認值是 0 ,如果匹配到上述 4 種正則表達式的情況後,值就變成1。你可以繼續往 map 中添加新的表達式規則。

2.2、在location中使用該變量:

# 注:不要改寫http code狀態,可能會導致cdn將原304狀態碼的數據緩存,進而導致打開具體url時為空白頁
location / {
 error_page 418 = @bots;
 if ($is_bot) {
 return 418;
 }
 proxy_pass http://91donkey_web;
 include proxy.conf;
 access_log /export/home/logs/91donkey/access.log main;
}

2.3、@bots的定義:

location @bots {
 proxy_pass http://91donkey_spider_web;
 include proxy.conf;
 access_log /export/home/logs/91donkey_spider/access.log main;
}

當判斷當前請求是爬蟲的時候,返回 418 錯誤碼。

通過 error_page 將 418 錯誤碼改為 200 (正常請求響應碼),然後進入 @bots 這個 location 進行下一步處理。@bots 中將請求反向代理到你指定的後端應用。

如此便可將正常的用戶訪問和爬蟲訪問獨立開來,使二者不會互相影響。

原文:https://www.cnblogs.com/91donkey/p/11445380.html


分享到:


相關文章: