我们遇到的情况是,对于一个性能缓慢的 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
由于没有真正回答你的问题而面临被否决的风险:
您可以使用 Google 网站管理员工具中的设置来降低 Googlebot 的速度。
大多数主流爬虫程序都支持 robots.txt 中的 Crawl-delay 指令,以减慢其速度。雅虎的机器人尤其具有攻击性。
在 robots.txt 中彻底禁止百度之类的网站。它们对你没有任何好处。
将攻击性机器人视为 DOS 攻击,并使用 IPTABLES 或 Apache 的 mod_security 插件限制来自每个 IP 的请求频率。
答案2
一些建议:
- 考虑使用
User-Agent
将机器人(或类似的东西)路由到静态页面,这样您的应用程序就不会花费周期来响应机器人。请参阅 mod 重写指南其中有一些例子 - 是否使用
robots.txt
选项?这可能是减轻服务器负载的最简单选项。添加另一台服务器可能会“昂贵”(在时间和维护方面),并且不会是我的第一选择。