Назад | Перейти на главную страницу

Nginx: Могу ли я настроить limit_req_zone с ключом с IP + URI?

Я пытаюсь настроить Nginx модуль limit_req чтобы ограничить частоту запросов, которую любой IP-адрес может направить к одному и тому же URL-адресу.

Я хотел бы определить limit_req_zone с ключом, который состоит из комбинации IP-адреса клиента и URI запроса. То есть вместо этого:

limit_req_zone $binary_remote_addr zone=req_dev:10m rate=2r/s;

Что-то вроде этого:

set $ip_url "$binary_remote_addr$request_uri"
limit_req_zone $ip_url zone=req_dev:10m rate=2r/s;

Но это не работает, потому что set нельзя назвать в http контекст:

nginx: [emerg] "set" directive is not allowed here in /etc/nginx/nginx.conf:47

Есть ли способ добиться этого?

Чтобы было ясно: я не хочу ограничивать скорость для определенного URL. Я хочу, чтобы IP-адрес не попадал по одному и тому же URL-адресу более двух раз в секунду.

Вы можете установить ключ ко всему, что хотите limit_req_zone.

limit_req_zone "$binary_remote_addr$request_uri" zone=req_dev:10m rate=2r/s;

Обратите внимание, что для этого требуется как минимум nginx 1.7.6.