Web爬虫重载站点

时间:2017-07-04 15:35:20

标签: nginx fail2ban

我们的一些网站存在问题,雅虎,谷歌,Yandex,Bing Ahrefs和其他网站都在同一时间对该网站进行索引,从而导致该网站死亡。

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

我们已经尝试将网站放在cloudflare之后,但这又没什么区别,我们所能做的就是阻止源IP。

我还能做什么?

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

运行nginx的Ubuntu服务器

Robots.txt文件在这里: -

User-agent: *
Disallow: /

发布此处以防有任何我可以让开发人员尝试的事情。

由于

2 个答案:

答案 0 :(得分:0)

您的 robots.txt 应该有效。请注意,并非所有抓取工具都尊重robots.txt。

robots.txt 区分大小写,需要在www.yourdomain.com/robots.txt上进行全球阅读。

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

答案 1 :(得分:0)

一种简单的方法是根据请求中的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;

这将确保GooglebotBingUser-Agent的所有请求的速率限制为每秒1个请求。请注意,速率限制将是"全球" (相对于每IP),即所有机器人将在单个队列中等待访问该网站。可以轻松修改配置以对每个IP进行速率限制,或者对某些用户代理进行白名单。

serverlocation级:

limit_req zone=bot burst=5;

这意味着"爆发"有5个请求是可能的。如果需要,您可以删除此选项。

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

虽然我应该说这整个问题要复杂得多。有很多恶意请求假装来自Google,Twitter,FB等来自各种扫描仪和抓取工具(例如,请参阅this question),他们既不尊重robots.txt也不尊重429.有时它们是相当的智能并且User-Agents模仿浏览器。在这种情况下,上述方法对您没有帮助。