只要是建有数据量比较多的网站,几乎不可避免采集的情况,这方面我们已经有多年的对付经验,主要是通过分析Web访问日志,找到采集的规律,相应来设置屏蔽IP地址或者URL网址来解决。
国内的Linux服务器上我们都安装了Squid作为Apache的前端缓存,所以我们遇到采集的情况就分析Squid的日志,在squid.conf文件中进行设置屏蔽,然后重启Squid服务就可以。
近期租用的国外Linux服务器上默认是没有Squid的,我们也就只用了Apache作为Web服务器,修改了httpd.conf来让Apache的日志文件显示更详细的虚拟主机域名、User-Agent等信息,以便遇到采集的情况可以分析。
前一阵子遇到来自固定某个或者某段IP的采集,我们就修改httpd.conf文件,在影响的主机设置中添加这样的代码:
Order Deny,Allow Deny from 125.115.2.85 Deny from 91.228.196.234
然后重启Apache服务就可以。
这两天遇到比较狡猾的采集,平均每10秒采集一次,IP地址分散到10多个,日志中的User-Agent也是各种都有,这样仅仅靠屏蔽IP还无法解决,但通过分析发现采集是顺着某种页面的很多分页顺序进行的,例如:http://www.example.com/path/file?page=12345 ,这个12345在不断增加中,因此只要屏蔽对http://www.example.com/path/file 这类URL的访问,就可以全部屏蔽这些采集。
设置可修改httpd.conf,也可以修改具体目录下的.htaccess文件,添加rewrite规则如下:
RewriteCond %{HTTP_HOST} ^can\.bizdirlib\.com(.*)$ RewriteCond %{REQUEST_URI} ^\/business_directory\/S\_\%26\_J(.*)$ RewriteRule .* - [F,L]
这样就屏蔽了can.bizdirlib.com站点下/business_directory/S_%26_J 这一类URL。
评论3
补充:禁止某种User-Agent访问的办法
除了屏蔽IP和被访问网址以外,还可以设置屏蔽User-Agent,在.htaccess中设置的例子如下:
另外,还可以把httpd.conf中屏蔽IP的办法也改为在.htaccess中设置,例如:
那么在tomcat中是在哪里修改才可以达到禁止User
那么在tomcat中是在哪里修改才可以达到禁止User-aget访问的效果呢抱歉,我自己没有用过Tomcat。
抱歉,我自己没有用过Tomcat。