NGINX 中的速率限制机器人(特定 IP)

NGINX 中的速率限制机器人(特定 IP)

我想限制(但不阻止)各种爬虫的速率。根据其他类似问题的示例,我想出了以下方法:

http {
  ## 10MB zone, 5 reqs per sec
  limit_req_zone $limit zone=zone_a:10m rate=5r/s;

  geo $limited {
    default 0;
    157.55.39.31/32 1;
    157.55.39.39/32 1;
    157.55.39.40/32 1;
    157.55.39.166/32 1;
    157.55.39.167/32 1;
    157.55.39.212/32 1;
    157.55.39.213/32 1;
    68.180.229.48/32 1;
  }

  map $limited $limit {
    0 "false";
    1 "true";
  }
  ## - do something -
}

如果我理解正确的话,地理区块中匹配的 IP 会将 $limited 设置为 1,然后地图区块会将 $limit 设置为 true/false。我认为接下来需要发生的是这样的“if”语句:

if ($limit = "true") {
  limit_rate zone=zone_a burst=10;
}

这是正确的做法吗?限制速率有什么缺点吗?

相关内容