Ограничить количество посещений (в секунду) сайтов ботом bing в конфигурации nginx

К сайту привязано несколько доменов. Необходимо снизить посещение сайтов (в совокупности) ботами ПС Bing.

Как преобразовать директиву

limit_req_zone $binary_remote_addr zone=one:10m rate=100r/s;

чтобы ограничение действовало не по ip, а по user_agent в котором встречается подстрока "bing"? При превышении количества запросов со стороны этих ботов выдавать ошибку с кодом 429: limit_req_status 429;


Ответы (1 шт):

Автор решения: Alexey Ten

Предположим что мы хотим запросы с User-Agent содержащие слово bing ограничивать 100rps независимо от IP, а все остальные запросы ограничить 100rps на IP.

Можно написать примерно такой конфиг:

map $http_user_agent $limit_key {
  default $binary_remote_addr;
  "~bing" 1;
}
...
limit_req_zone $limit_key zone=one:10m rate=100r/s;

Документация:

→ Ссылка