node.js - 在我的网站上放慢流氓网络 srappers 并仍然使用 Varnish

标签 node.js redis web-scraping varnish ubuntu-server

想象一下,有一些爬虫在抓取我的网站。 我怎样才能禁止它们并仍然将 Google Bots 列入白名单?

我想我可以找到谷歌机器人的 ip 范围,我正在考虑使用 Redis 来存储当天的所有访问,如果在短时间内我看到太多来自同一 IP 的请求 -> 禁止。

我的堆栈是 ubuntu 服务器、nodejs、expressjs。

我看到的主要问题是这种检测是在 Varnish 之后进行的。所以 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

关于node.js - 在我的网站上放慢流氓网络 srappers 并仍然使用 Varnish,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18054403/

相关文章:

Node.js 电子邮件存在检查

node.js - 特定 app.get 上的快速超时

node.js - Angular 4 - 检测 http 请求的连接问题

redis - 如何使用 Redis 查找介于不同键的两个值之间的结果?

java - Spring Boot中redis CacheManager反序列化时的错误处理

python - 我在 python lambda 处理程序中找不到回调参数

python - 我的 celery redis 任务在 heroku 服务器上的 django 应用程序中不起作用

python - 从 Perl 中的链接检索媒体(图像、视频等)

Perl HTML 解析器

python - 如何使用 beautifulSoup 从 <td> 标签中单独抓取数据?