想象一下有爬虫爬取我的网站。我怎样才能禁止它们并仍然将 Google Bot 列入白名单?
我想我可以找到谷歌机器人的 ip 范围,我正在考虑使用 Redis 来存储一天中的所有访问,如果在短时间内我看到来自同一个 IP 的太多请求 -> 禁止。
我的堆栈是 ubuntu 服务器、nodejs、expressjs。
我看到的主要问题是这种检测落后于 Varnish。所以清漆缓存必须被禁用。有更好的想法,或者好的想法吗?
想象一下有爬虫爬取我的网站。我怎样才能禁止它们并仍然将 Google Bot 列入白名单?
我想我可以找到谷歌机器人的 ip 范围,我正在考虑使用 Redis 来存储一天中的所有访问,如果在短时间内我看到来自同一个 IP 的太多请求 -> 禁止。
我的堆栈是 ubuntu 服务器、nodejs、expressjs。
我看到的主要问题是这种检测落后于 Varnish。所以清漆缓存必须被禁用。有更好的想法,或者好的想法吗?
您可以使用 Varnish ACL [1],在 apache 中维护它可能会有点困难,但肯定会起作用:
acl bad_boys {
"666.666.666.0"/24; // Your evil range
"696.696.696.696"; //Another evil IP
}
// ...
sub vcl_recv {
if (client.ip ~ bad_boys) {
error 403 "Forbidden";
}
// ...
}
// ...
您还可以将其列入白名单、使用用户代理或其他技术来确保它不是 GoogleBot……但我会在 Varnish 而不是 Apache 中为自己辩护。
[1] https://www.varnish-cache.org/docs/3.0/reference/vcl.html#acls
您可以使用 robots.txt 停止爬虫
User-agent: BadCrawler
Disallow: /
如果爬虫遵循 robots.txt 规范,则此解决方案有效