限制网络爬虫


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.