【问题标题】:How to keep bots and spiders from consuming my server's resources?如何防止机器人和蜘蛛消耗我的服务器资源?
【发布时间】:2018-07-01 21:11:51
【问题描述】:

我的 PHP 脚本计算唯一访问者。与谷歌分析相比,这个数字是荒谬的;每天 30 000 个,但 Analytics 计算 2000 个。2000 是正确的数字,所以我在脚本中添加了一个条件以避免计算机器人和蜘蛛。

我还让它识别机器人;在不到 1 分钟的时间里,我有超过 100 个。内存有限,机器人正在消耗资源,我想避免这种情况。我的 robots.txt :

# Allow Google, Yahoo and Bing to crawl all beside of /admin/
User-agent: Googlebot 
User-agent: Yahoo! Slurp
User-agent: msnbot 
Disallow: /admin/ 
Disallow: /analitics/
Disallow: /class/
Allow: / 

# Disallow all other to crawl everywhere
User-agent: * 
Disallow: / 

有没有办法阻止这么多请求?我不介意 Google 或 Bing 的爬虫,但这太荒谬了。一个样本:

es ip:40.77.167.161 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
pt ip:40.77.167.178 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
pt ip:40.77.167.178 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
pt ip:40.77.167.178 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.140 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
pt ip:40.77.167.177 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
pt ip:40.77.167.191 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
pt ip:40.77.167.178 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
es ip:40.77.167.87 pais:United States cidade:Boydton user agent:mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)

【问题讨论】:

  • 我投票结束这个问题,因为迁移到服务器故障
  • cloudflare 这样的东西可以帮助你。

标签: .htaccess web-crawler bots


【解决方案1】:

首先,我们确实区分了正确宣布的机器人和声称是其他人的机器人。由于各种原因(不仅是坏的),有很多机器人充当其他机器人。在宣布为其他人的机器人组中,有一个子组也忽略了robots.txt

在你的例子中,我们似乎有一个来自 Microsoft 的实际机器人。

机器人服从 robots.txt

这些 IP 实际上似乎是来自 Bing 的正确 IP 地址。微软解释说要找出whether an IP address actually belongs to them,我们应该使用nslookup

这给了我们:

$ nslookup 40.77.167.87
87.167.77.40.in-addr.arpa   name = msnbot-40-77-167-87.search.msn.com.

$ nslookup msnbot-40-77-167-87.search.msn.com
[...]
Non-authoritative answer:
Name:   msnbot-40-77-167-87.search.msn.com
Address: 40.77.167.87

微软没有提供一个明确的例子来说明他们的bot will listen to in the robots.txt file,但我认为他们希望看到bingbot而不是msnbot

注意

Bingbot,在为自己找到一组特定指令后,将忽略通用部分中列出的指令,因此除了您指定的特定指令外,您还需要重复所有通用指令在他们自己的文件部分中为他们创建。

[...]

  1. 机器人在 robots.txt 文件中被引用为用户代理。 [...]

(由我突出显示)

另一方面,Microsoft 链接到Robots Database 以获取有效机器人名称列表,该列表根本没有列出 Bingbot(只有 msnbot,您已经使用)。

不过,我还是会尝试将 bingbot 添加到 robots.txt 文件中的用户代理中,看看是否有帮助。

您没有在每个请求中包含请求的实际路径。好像有where Microsoft's Bingbot cannot be blocked with robots.txt的情况。

机器人不遵守 robots.txt

对于不遵守 robots.txt 的机器人,只能使用服务器端检测。您可以根据他们的 IP(如果您始终看到来自同一个 IP 的请求)或他们的用户代理(如果他们一直宣布为同一个用户代理)阻止他们。

例如一些网站在服务器端阻止用户代理 scrapy(并返回一个空页面或 404 或类似的),因为这是流行的网络抓取框架使用的默认值。

您还可以自动实施基于 IP 的阻止,例如如果您在 x 小时内看到超过 k 个请求,则在接下来的 10*x 小时内阻止该 IP。如果 IP 属于消费者 ISP,这当然会导致误报,因为他们经常将相同的 IP 地址提供给不同的用户。这意味着,您可能会阻止普通用户。但是,如果您每天有 2000 名访问者,我假设您网站的两个访问者拥有相同的 IP 地址并因请求过多而被阻止的风险很低。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    相关资源
    最近更新 更多