Я пытаюсь настроить 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.