問題
之前客戶能夠正常訪問的一個網站這幾天訪問很慢,甚至有時候還拒絕訪問。通過Nginx訪問日志排查,發現有大量的請求指向同一個頁面,而且訪問的客戶端IP地址在不斷變化且沒有太多規律,很難通過限制IP來拒絕訪問。但請求的user-agent都帶有Bytespider標記,這是一種流氓爬蟲。訪問日志如下圖所示:
解決
解決思路:因為user-agent帶有Bytespider爬蟲標記,這可以通過Nginx規則來限定流氓爬蟲的訪問,直接返回403錯誤。
1、在/etc/nginx/conf.d目錄下(因Nginx的安裝區別,可能站點配置文件的路徑有所不同)新建文件deny_agent.config配置文件:
#forbidden Scrapy if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) { return 403; } #forbidden UA if ($http_user_agent ~ "Bytespider|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|Ezooms|^$" ) { return 403; } #forbidden not GET|HEAD|POST method access if ($request_method !~ ^(GET|HEAD|POST)$) { return 403; }
2、在對應站點配置文件中包含deny_agent.config配置文件(注意是在server里面):
3、重啟Nginx,建議通過nginx -s reload平滑重啟的方式。重啟之前請先使用nginx -t命令檢測配置文件是否正確。
4、通過curl命令模擬訪問,看配置是否生效(返回403 Forbidden,則表示配置OK):
附錄:UA收集
FeedDemon 內容采集 BOT/0.1 (BOT for JCE) sql注入 CrawlDaddy sql注入 Java 內容采集 Jullo 內容采集 Feedly 內容采集 UniversalFeedParser 內容采集 ApacheBench cc攻擊器 Swiftbot 無用爬蟲 YandexBot 無用爬蟲 AhrefsBot 無用爬蟲 YisouSpider 無用爬蟲(已被UC神馬搜索收購,此蜘蛛可以放開!) jikeSpider 無用爬蟲 MJ12bot 無用爬蟲 ZmEu phpmyadmin 漏洞掃描 WinHttp 采集cc攻擊 EasouSpider 無用爬蟲 HttpClient tcp攻擊 Microsoft URL Control 掃描 YYSpider 無用爬蟲 jaunty wordpress爆破掃描器 oBot 無用爬蟲 Python-urllib 內容采集 Indy Library 掃描 FlightDeckReports Bot 無用爬蟲 Linguee Bot 無用爬蟲