“爬虫”可畏啊!即爱又恨!原先还以为google要稍微文明点,没想到现在要么不来,一来就上百个,而且每周都至少来一次,JBOSS被抓得当机了好几次,我们除了在不断的优化性能,不得不想办法修改架构!
基本思路是这样的,在不影响正常访问的情况想,将爬虫和用户的访问分开,并且爬虫爬过去的东西和用户访问的内容应该是一样的,如图所示:
该方案主要是基于apache对HTTP请求头的判断,在RewriteRule里添加两条配置:
RewriteCond %{HTTP_USER_AGENT} ^Googlebot/2.*
RewriteRule ^/(.*) [P,L] 注:通过内网跳转到目标服务器的8000端口
并在hosts文件里将spider指向目标主机。
针对公司的服务器架构(环境架构 squid+apache+jboss)我设计了两套方案,方案一:将“爬虫”引向服务器后台;方案二:在其中一台较空的服务器上安装虚拟机,然后在虚拟机上配置一个WEB前台。两种方案各有优缺点,方案一的优点在于配置起来比较省力,只要在原基础上增加些配置就可用来,但爬虫一但过来,后台的负担在短时间内会比较大,有可能会影响公司内部的后台操作;方案二的优点是基本完全独立开来,即使虚拟机当机也不影响正常用户访问,缺点是配置稍微复杂了点。
两套方案都使用了squid的缓存,在本地模拟测试的时候两套方案都可行。执行的时候有一些具体的配置需要注意一下,否则可能会出现proxy error问题。在引导过来的服务上的Rewrite规则里需要增加一下配置:
RewriteRule ^spider(.*) [P,L]
在hosts文件里spider指向127.0.0.1。
具体的应用可能都会不一样,这里只是提供了本人的一个有关对付“爬虫”的思路!
阅读(1163) | 评论(0) | 转发(0) |