網站太慢?避免不必要的網路蜘蛛訪問,降低系統負載


網站蜘蛛的危害

訪問速度變慢

近來在調教網站系統效能的時候, 發現有時候系統的負載很高,CPU 使用率都接近 100%,網站打開的速度很慢, 於是觀察一下系統的 log 記錄。

主要先看 access log,發現出現下面這類的蜘蛛訪問

46.4.72.200 – - [07/Aug/2014:10:10:24 +0000] "GET /robots.txt HTTP/1.0″ 200 390 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)"

183.60.213.36 – - [07/Aug/2014:10:10:34 +0000] "GET /tag/%E7%BF%BB%E8%AD%AF/ HTTP/1.1″ 200 7823 "-" "Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html)"

46.4.72.200 – - [07/Aug/2014:10:13:09 +0000] "GET /606/ HTTP/1.0″ 200 10753 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)"

有些人可能覺得有蜘蛛訪問是好事,因為網路蜘蛛爬取網站內容以後,網友才能透過搜索引擎訪問到你的網站。然而並非都是這樣,網路上的搜索引擎,目前被幾個大頭壟斷,有 Google、Yahoo、Bing、Baidu 等,網站搜索流量也主要從這些地方來,其他搜索引擎或者蜘蛛來爬取資料,通常對網站沒有多大貢獻,而且還有很多害處,為何這麼說呢?

以我觀察到的這個蜘蛛 MJ12bot 為例,我發現每次它的蜘蛛來爬取我的網站的時候,都是在短時間內(30分鐘)非常大量的爬取,量大到整個系統資源都被吃光,CPU 嚴重負荷不了,網站隨時有掛點的可能,這種我稱之為暴力蜘蛛,暴力蜘蛛對你的訪客流量通常沒有甚麼貢獻,卻吃掉你的系統資源以及網路頻寬,害處遠大於好處,遇到這種暴力蜘蛛,最好的方式就是拒絕它的訪問。

而且我發現這種蜘蛛並非個案,網路上非常之多,我遇到的這幾個我已經果斷拒絕它們的訪問。 其時之前我也發現 Bing 也有造成系統負載過重的情況

屏蔽暴力蜘蛛訪問

要屏蔽暴力蜘蛛訪問有幾種方法,首先先從 robots.txt 做起

【robots.txt】 robots.txt 位於網站的根路徑

以我發現的這幾個蜘蛛為例 YisouSpider、EasouSpider、EtaoSpider、MJ12bot ,在 robots.txt 裡屏蔽這幾個蜘蛛的訪問,寫法如下

User-agent: YisouSpider
Disallow: /
User-agent: EasouSpider
Disallow: /
User-agent: EtaoSpider
Disallow: /
User-agent: MJ12bot
Disallow: /

不過在 robots.txt 裡頭屏蔽蜘蛛訪問並不是 100% 有效,很多蜘蛛並不理會 robots.txt 還是照要來爬取資料,這個時候就要用另一種方式

從 .htaccess 來拒絕暴力蜘蛛訪問

   

【.htaccess】

寫法如下: 判斷 USER Agent 如果有這幾個蜘蛛就利用重寫機制拒絕它們訪問

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^YisouSpider [NC]
RewriteRule .* - [F]
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^EasouSpider [NC]
RewriteRule .* - [F]
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^EtaoSpider [NC]
RewriteRule .* - [F]
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^MJ12bot [NC]
RewriteRule .* - [F]

可以合併在一起寫

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^YisouSpider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^EasouSpider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^EtaoSpider [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^MJ12bot [NC,OR]
RewriteCond %{HTTP_USER_AGNET} ^spbot [NC]
RewriteRule .* - [F,L]

【拒絕某些 IP 訪問】

還有一種就是在 Apache 的設定裡把該 IP 擋掉,不過某些暴力訪問的來源 IP 是變動的,它是一個 IP 段,不是單一 IP,若要把所有這類 IP 都擋掉,很麻煩。

Apache 的設定檔在 /etc/httpd/conf/httpd.conf

打開 httpd.conf 後找到網站的根路徑 Directory /var/www/html

把要擋掉的 IP 寫在 Deny from 後面,如下

<Directory "/var/www/html">
    Order allow,deny
    Allow from all
    Deny from 5.9.26.210
    Deny from 162.243.213.131
</Directory>

怎麼找蜘蛛的訪問蹤跡?

附帶一提,access log 內容通常很多,要一條一條找很困難,如果你想找 YisouSpider 這個蜘蛛在 access log 裡頭的蹤跡,可以用下面的指令尋找

cat access.log| grep-i "YisouSpider"| awk ‘{print $1}’

避免不必要的網路蜘蛛訪問,降低系統負載 延伸閱讀

(*) [SEO筆記] 防止搜索引擎訪問不必要的檔案及路徑

(*) 親愛的,我把 Apache 的 access log 檔變小了

(*) Amazon EC2 t1.micro 免費實例崩潰當機! 真的不夠用嗎? Amazon EC2 + Apache + PHP + MySQL 系統調教

本文地址:網站太慢?避免不必要的網路蜘蛛訪問,降低系統負載
內容對你有幫助嗎? 臉書分享:
分享到:

2 Responses to 網站太慢?避免不必要的網路蜘蛛訪問,降低系統負載

  1. 海角 說道:

    正愁找不到解决办法呢,感谢分享

  2. 澳门金沙国际 說道:

    不过,C罗并非希望支付全部罚款,而是仅仅愿意支付380万欧元的金额来解决这个案子。
    澳门金沙国际 http://www.jbjoias.com/

發表迴響

您的電子郵件位址並不會被公開。 必要欄位標記為 *

*

您可以使用這些 HTML 標籤與屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

交換連結: Liang's Blog |