如何阻止机器人使我性能缓慢的 Web 应用程序超载?

如何阻止机器人使我性能缓慢的 Web 应用程序超载?

我们遇到的情况是,对于一个性能缓慢的 Web 应用程序,机器人占据了页面请求的 40%。

短期救济

为了立即缓解压力,我想到了以下做法:

  • 设置指向数据库从属副本的应用程序的另一个实例。 将其称为“服务器 B”,而主应用程序为“服务器 A”
  • 将所有机器人流量转发到“服务器 B”,将所有其他请求转发到主应用程序“服务器 A”

按服务器将“机器人流量”与“用户流量”分开,可以带来更准确的服务器端分析(即知道所有流量都来自“真实用户”而不是机器人)。此外,我们可以为“机器人流量”使用较慢的服务器,并将更多资源分配给“真正的客户”,

语境

  • 当前使用带有 mod_proxy 前端的 apache 2.2。
  • 后端是jboss/tomcat
  • 我们有一个手动维护的机器人标头列表(例如 baidu、bingbot、googlebot、msnbot 等)

问题:

  • apache(或 mod_proxy)能否根据标头转发请求(即,将标头中包含 baidu、googlebot、msnbot 等的所有请求转发到服务器 B,将其他所有请求转发到服务器 A)

请提出其他建议

提前致谢

答案1

由于没有真正回答你的问题而面临被否决的风险:

  1. 您可以使用 Google 网站管理员工具中的设置来降低 Googlebot 的速度。

  2. 大多数主流爬虫程序都支持 robots.txt 中的 Crawl-delay 指令,以减慢其速度。雅虎的机器人尤其具有攻击性。

  3. 在 robots.txt 中彻底禁止百度之类的网站。它们对你没有任何好处。

  4. 将攻击性机器人视为 DOS 攻击,并使用 IPTABLES 或 Apache 的 mod_security 插件限制来自每个 IP 的请求频率。

答案2

一些建议:

  • 考虑使用User-Agent将机器人(或类似的东西)路由到静态页面,这样您的应用程序就不会花费周期来响应机器人。请参阅 mod 重写指南其中有一些例子
  • 是否使用robots.txt选项?这可能是减轻服务器负载的最简单选项。添加另一台服务器可能会“昂贵”(在时间和维护方面),并且不会是我的第一选择。

相关内容