网站内容抓取采集真是中国互联网的一大特色,我们做了这么多年网站,一直都遇到各种各样对我们内容进行采集、复制的家伙。前一阵子发现一个网站 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恢复。
另外,我们使用了几年的反采集程序确实能起到一定作用,但有的情况下它本身也会造成数据库负载过高,我还在考虑是否修改优化或者简化功能甚至取消。
评论