【问题标题】:Web crawlers overloading site网络爬虫超载网站
【发布时间】:2017-07-04 15:35:20
【问题描述】:

我们的一些网站存在问题,Yahoo、Google、Yandex、Bing Ahrefs 和其他网站都同时索引该网站,这导致该网站死机。

我已将 fail2ban 配置为阻止源 IP,但这些 IP 永远在变化,因此并不理想。我也尝试过使用 robots.txt,但这没什么区别。

我们曾尝试将网站置于 cloudflare 之后,但这也没什么区别,我们所能做的就是阻止源 IP。

我还能做什么?

目前我们正在使用 Nagios 监控站点,当站点无响应时会重新启动 nginx,但这似乎远非理想。

运行 nginx 的 Ubuntu 服务器

Robots.txt 文件在这里:-

User-agent: *
Disallow: /

张贴在这里,以防我可以让我们的开发人员尝试。

谢谢

【问题讨论】:

  • 我不确定 Stack Overflow 是否适合问这个问题。无论如何,请在此处发布您的 /robots.txt。
  • a) 我认为服务器故障可能是堆栈交换上更合适的站点 b) 你确定 robots.txt 在正确的目录中吗?至少谷歌、雅虎和必应尊重它。谷歌在其网站管理员工具中的某处有一个用于 robots.txt 的测试工具

标签: nginx fail2ban


【解决方案1】:

一种简单的方法是根据请求中的User-Agent 标头对它们进行速率限制。示意图如下所示。

在 Nginx 配置中http 级别:

map $http_user_agent $bot_ua {
  default '';

  "~*Googlebot|Bing" Y;
}

limit_req_zone $bot_ua zone=bot:1m rate=1r/s;

这将确保User-Agent 中带有GooglebotBing 的所有请求将被限制为每秒1 个请求。请注意,速率限制将是“全局的”(相对于每个 IP),即所有机器人将在单个队列中等待访问网站。配置可以很容易地修改为基于每个 IP 的速率限制或将一些用户代理列入白名单。

serverlocation 级别:

limit_req zone=bot burst=5;

这意味着 5 个请求的“突发”是可能的。如果你愿意,你可以放弃这个选项。

当请求受到速率限制时,Nginx 将发出 HTTP 状态码 429。 “理智的”网络爬虫检测到这一点并减慢扫描网站的速度。


虽然我应该说整个问题要复杂得多。有很多恶意请求假装来自 Google、Twitter、FB 等,来自各种扫描仪和爬虫(例如,请参阅 this question),它们既不尊重 robots.txt 也不尊重 429。有时它们非常聪明并且拥有 @ 987654334@模仿浏览器。在这种情况下,上述方法对您没有帮助。

【讨论】:

    【解决方案2】:

    您的 robots.txt 应该可以工作。请注意,并非所有爬虫都尊重 robots.txt。

    robots.txt 区分大小写,并且需要在 www.yourdomain.com/robots.txt 上全球可读。

    看看添加Crawl-delay: 10会发生什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多