Ограничивающие скорость боты (конкретные IP) в NGINX

Я хотел бы ограничить (но не блокировать) различные сканеры. Основываясь на других примерах подобных вопросов, я придумал это:

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-адреса в геоблоке будет установлено значение $limit 1, а затем для блока map будет установлено значение $limit для true/false. Я думаю, что должно произойти дальше, это утверждение "если", как это:

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

Это правильный способ сделать это? Есть ли обратная сторона ограничения скорости?

0 ответов

Другие вопросы по тегам