当前位置

Apache中设置屏蔽IP地址和URL网址来禁止采集

James Qi 在 2012年11月23日 - 11:31 提交
内容摘要:只要是建有数据量比较多的网站,几乎不可避免采集的情况,这方面我们已经有多年的对付经验,主要是通过分析Web访问日志,找到采集的规律,相应来设置屏蔽IP地址或者URL网址来解决。 国内的Linux服务......

  只要是建有数据量比较多的网站,几乎不可避免采集的情况,这方面我们已经有多年的对付经验,主要是通过分析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。

 

评论

-- 发自IP地址: 61.183.172.41 (位置 | 谁是)

除了屏蔽IP和被访问网址以外,还可以设置屏蔽User-Agent,在.htaccess中设置的例子如下:

RewriteCond %{HTTP_HOST}  ^aus\.bizdirlib\.com(.*)$
RewriteCond %{HTTP_USER_AGENT} ^(.*)(Creative\sAutoUpdate|HTTrack)(.*)$
RewriteRule .* - [F,L]

另外,还可以把httpd.conf中屏蔽IP的办法也改为在.htaccess中设置,例如:

RewriteCond %{HTTP_HOST}  ^aus\.bizdirlib\.com(.*)$
RewriteCond %{REMOTE_ADDR} ^(202\.70\.136\.158|161\.183\.172\.141)$
RewriteRule .* - [F,L]

 

James Qi / 祁劲松