apache设置禁止爬虫(搜索引擎)抓取及若干

jackxiang 2011-1-12 10:13 | |
比如开发一个apache的module,挡掉那些不起眼的爬虫。这个是最重要的!
小站可以:if(stripos($_SERVER['USER_AGENT'],'robot')!==fales){
exit;
}
或者bot
后面有其他的方法,值得去参考。

我们的站点被一种莫名其妙的故障所困扰(象我先前说的那样). 虽然还无法彻底找到原因所在, 但是有一个现象却很显然.
那就是出问题的时候, 爬虫很多.
现在做网站多了,做搜索的也多了, 自然爬虫也多了...而drupal, 自身的复杂度导致了可能访问某些地址会有极大的cpu/内存消耗, 而robot的访问显然不必要的. 虽然有自带的robots.txt, 但是随着新模块的安装,新内容的提供, 显然默认的robots.txt是不够用的. (robots.txt 见 http://www.robotstxt.org/orig.html )
分析apache的access log, 发现除了google 和 百度的爬虫之外还有以下爬虫(这也是设置在robots.txt里的内容):
User-agent: YRSpider
Disallow: /
User-agent: Sogou web spider
Disallow: /
User-agent: Sosospider
Disallow: /
User-agent: YoudaoBot
Disallow: /
User-agent: HuaweiSymantecSpider
Disallow: /
User-agent: Sosoimagespider
Disallow: /
(其中YRSpider, HuaweiSymantecSpider 似乎是引擎)
尽管如此, 即便我设置了robots.txt, 象Sosospider依然不闻不问...无奈之下,只能直接Deny IP了...
例如, 寻找Sogou web spider:
[root@localhost ~]# tail -n 10000 /var/log/httpd/xxx-access_log | grep 'Sogou web spider' | awk '{ print $1 }' | sort | uniq
220.181.125.67
220.181.125.69
220.181.125.70
220.181.125.71
220.181.125.72
220.181.94.212
220.181.94.213
220.181.94.215
220.181.94.219
220.181.94.220
220.181.94.221
220.181.94.222
220.181.94.225
220.181.94.226
220.181.94.229
220.181.94.230
220.181.94.231
220.181.94.232
220.181.94.234
220.181.94.235
220.181.94.236
220.181.94.237
但是你不可能一个个写在apache配置里面. 可以写成:
        # deny from Sogou web spider
        Deny from 220.181.125.64/29
        Deny from 220.181.94.192/26
(在 Allow from all 之后)
目前deny了这些:
        # deny from YRSpider
        Deny from 61.135.184.196
        Deny from 61.135.184.197
        # deny from Sogou web spider
        Deny from 220.181.125.64/29
        Deny from 220.181.94.192/26
        # deny from Sosospider
        Deny from 114.80.93.48/28
        Deny from 124.115.0.0/24
        Deny from 124.115.4.0/24
        # deny from YoudaoBot
        Deny from 61.135.249.220
        # deny from HuaweiSymantecSpider
        Deny from 112.95.147.149
        Deny from 69.28.58.39
        Deny from 69.28.58.4
        # deny from Sosoimagespider
        Deny from 124.115.3.34
        Deny from 124.115.6.0/24
        Deny from 124.115.7.15
        Deny from 124.115.7.16
至于ip和ip段的换算不在本文讨论范围, 不过linux(+mac)下可以方便的用echo | bc来显示不同进制的数字(也许有其它方法):
比如
yarco@macbook ~$ echo 'ibase=2;10000000' | bc
128
总之, 看起来管理服务器的主要在于经验.


来源:http://hi.baidu.com/yarcowang/blog/item/a3637109c9e026840b7b823f.html

说是服务器负荷过重。我登录后一检查,发现cpu利用率一直在 90%左右徘徊,查看了一下top,是apache占用了大部分资源。经过迅速排查,发现是一个论坛客户的网站占用资源过多。上去他的论坛看了一下,在线 人数才3个,为了确认,将他的网站暂时关闭了几分钟,服务器很快就恢复正常了。检查一下log,发现是一个深圳的IP在疯狂的访问论坛导致的,将此IP用 iptables封掉,恢复此论坛,服务器也没事。本来事情到此就算完了。但是我发现此捣乱的IP是深圳市的adsl,然后使用的是某个软件,user agent是固定的,于是改了一下apache的配置文件,防止其他人用同样的软件来捣乱。
原来此论坛的目录设置如此:

DocumentRoot /var/www/xxxxx
    <Directory "/var/www/xxxxx">
        Order allow,deny
        Allow from all
    </Directory>

加多两行就可以了
DocumentRoot /var/www/xxxxx


    <Directory "/var/www/xxxxx">
        SetEnvIfNoCase User-Agent "badguy" getout
        Order allow,deny
        Allow from all
       deny from env=getout
    </Directory>
badguy是捣乱者的user agent含有的字符,按具体情况修改,可以添加多行 SetEnvIfNoCase User-Agent "badguy" getout        
来源:http://www.rosoo.net/a/201003/8783.html


作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/3948/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]