限制网络爬虫

限制网络爬虫

我的网站受到 Google 网络蜘蛛的 DoS 攻击。欢迎 Google 为我的网站建立索引,但有时它查询我网站上的标签云的速度比我的网络服务器生成结果的速度快,导致我的网络服务器耗尽资源。

如何限制对我的网络服务器的访问以使普通访问者不受影响?

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

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

iptables -m limit也有同样的缺点,而且最重要的是,我无法对每个 IP 源地址进行选择。

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

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

答案1

尝试一下mod_qos阿帕奇模块。当前版本具有以下控制机制。

  • 对位置/资源 (URL) 或虚拟主机的并发请求的最大数量。
  • 带宽限制,例如每秒允许的 URL 最大请求数或每秒下载的最大/最小千字节数。
  • 限制每秒请求事件的数量(特殊请求条件)。它还可以“检测”非常重要的人(VIP),他们可以不受限制或较少限制地访问网络服务器。
  • 用于拒绝未经授权的操作的通用请求行和标头过滤器。
  • 请求正文数据限制和过滤(需要 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

相关内容