Очень краткая заметка с примером как можно ограничить скорость обработки запросов от IP адресов, но исключив при этом роботов с определённым “юзер агентом”.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# ref: https://gist.github.com/supairish/2951524

# IP адреса в белом списке - для них не будет применяться лимитирование
geo $geo_whitelist {
  default 0;
  1.2.3.4 1;
  2.3.4.5/24 1;
}

# Юзер агенты в белом списке - для них не будет применяться лимитирование
map $http_user_agent $whitelist {
  default $geo_whitelist;
  ~*(google) 1;
}

# Если в белом списке 0, то помещаем "binary IP address" в $limit для применения к ним ограничений
map $whitelist $limit {
  0 $binary_remote_addr;
  1 "";
}

limit_req_zone $limit zone=perip:30m rate=1r/s;