限制网络爬虫


8

我的网站正在由Google webspiders进行DoS。欢迎Google为我的网站建立索引,但有时它在我的网站上查询标签云的速度快于Web服务器生成结果的速度,从而使我的Web服务器资源不足。

如何以不影响普通访问者的方式限制对Web服务器的访问?

robots.txt是不可选项,因为它会阻止整个网站被编制索引。

iptables -m recent 这很棘手,因为某些页面上有很多图像或其他数据文件,并且这些页面上也有“最近”的触发器(通常是我的RSS聚合器,正在加载图像和提要)。

iptables -m limit 具有相同的缺点,最重要的是,我无法按IP源地址进行选择。

如何限制导致服务器负载过高的访问者?

我在VirtualBox VM中的Ubuntu服务器上运行apache2。


1
您可以使用网站站长工具降低抓取速度。见support.google.com/webmasters/bin/...
derobert

Answers:


5

尝试使用mod_qos Apache模块。当前版本具有以下控制机制。

  • 对位置/资源(URL)或虚拟主机的最大并发请求数。
  • 带宽的限制,例如每秒对URL的最大允许请求数或每秒最大/最小下载的千字节。
  • 限制每秒的请求事件数(特殊请求条件)。它还可以“检测”非常重要的人员(VIP),这些人员可以不受限制地访问Web服务器或受到较少的限制。
  • 通用请求行和标头过滤器可拒绝未经授权的操作。
  • 请求正文数据限制和过滤(需要mod_parp)。
  • TCP连接级别的限制,例如,单个IP源地址或动态保持活动控制所允许的最大连接数。
  • 服务器可用的TCP连接用尽时,优先使用已知的IP地址。

来自文档的此示例条件规则应使您朝正确的方向前进。

# set the conditional variable to spider if detecting a
# "slurp" or "googlebot" search engine:
BrowserMatch             "slurp"                  QS_Cond=spider
BrowserMatch             "googlebot"              QS_Cond=spider

# limits the number of concurrent requests to two applications
# (/app/b and /app/c) to 300 but does not allow access by a "spider"
# if the number of concurrent requests exceeds the limit of 10:
QS_LocRequestLimitMatch       "^(/app/b/|/app/c/).*$"  300
QS_CondLocRequestLimitMatch   "^(/app/b/|/app/c/).*$"  10   spider

看起来比我在星期五晚上享受比利时啤酒所希望的要复杂一些。明天必须看看。通过浏览器匹配和其他东西看起来很有希望。来考虑一下吧……如果它能自动请求请求robot.txt的任何主机/用户代理:o)Thnx Uther
jippie 2012年

享受那啤酒!
乔治M

好,看起来很简单。实施它以查看我的网络服务器是否现在能够跟上。
jippie 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.