網站内容抓取采集真是中國互聯網的一大特色,我們做了這麼多年網站,一直都遇到各種各樣對我們内容進行采集、複制的家夥。前一陣子發現一個網站 www.postcodequery.com 具體和我們的 www.postcodebase.com 幾乎内容一樣,也真是煞費苦心。👎
另外近期在搬遷一些Wiki網站到雲服務器上的時候,發現RDS會急劇升高、卡死,從MySQL進程來看是一些内部搜索語句造成的,顯然正常的訪問者搜索不會這麼多、這麼快,隻能是機器人采集才會這樣,當時來不及查就臨時把内部搜索功能關閉了。
但關閉功能畢竟不是長久之計,今天早上再次排查、處理,過程如下:
- 修改MediaWiki的LocalSettings.php,打開搜索功能;
- 觀察RDS進程情況,找到明顯增多、堆積的語句,例如:SELECT /* SearchMySQL::searchInternal 183.64.229.38 */ page_id,page_namespace,page_title FROM `page`,`searchindex` WHERE (page_id=si_page) AND ( MATCH(si_title) AGAINST('+\"u8xxxxxx u8xxxxxx\" ' IN BOOLEAN MODE) ) AND page_namespace = '0' LIMIT 100
- 在apache日志access.log中找到以上IP訪問的記錄,會發現很多都是搜索,例如:http://shandong.mingluji.com/index.php?limit=100&title=%E7%89%B9%E6%AE%8A:%E6%90%9C%E7%B4%A2&search=%E6%B7%84%E5%8D%9A+%E7%94%B5%E8%84%91&ns0=1&redirs=1&offset=0 ,這種站内搜索非常消耗資源,普通訪問者偶爾搜索不會對數據庫服務器造成負擔,但快速大量的機器搜索會讓數據庫服務器的内存、CPU耗盡從而變慢、連接數超過限制;
- 用apache rewrite的辦法修改.htaccess或者httpd.conf,對上述訪問特征進行屏蔽,具體寫法請自行根據情況決定并查資料參考apache rewrite用法;
- 屏蔽之前已經導緻RDS負載過高,一些進程殺死後成為killed但依然短期不消失,隻好重啟RDS恢複。
另外,我們使用了幾年的反采集程序确實能起到一定作用,但有的情況下它本身也會造成數據庫負載過高,我還在考慮是否修改優化或者簡化功能甚至取消。
评论