Как в NGINX ограничить частоту запросов к конкретному URL?
Есть сайт, допустим, site.com, и я не хочу ограничивать скорость к сайту в целом, но хочу ограничить доступ к определенному урлу site.com/page с одного ip не более 1 раза в 5 секунд. Не пойму, как это сделать. Ведь если я задаю директиву limit_req_zone, то она уже для всего сайта работает и включает ограничение, а мне это не нужно. Как быть?
limit_req ограничивает (не скорость доступа, кстати, а частоту запросов - скоростью рулит limit_rate) ровно там, где вы его добавите. Добавите в отдельном локейшене с нужными урлами - будет ограничивать не весь сайт, а только определённые урлы.
Но чтобы использовать limit_req, я же должен сначала зону задать с помощью limit_req_zone , а эта директива уже лимитирует частоту доступа. Во всяком случае в доках NGINX так сказано
Вадим, limit_req_zone сама по себе ничего не лимитирует, а «Задаёт параметры зоны разделяемой памяти, которая хранит состояние для разных значений ключа»
Вадим, да, вы задаёте зону - но ограничения в рамках неё применяются только к запросам тех локейшенов, где присутствует директива limit_req, относящаяся к этой зоне. Их может быть несколько в разных локейшенах или, наоборот, несколько limit_req`ов разных зон в одном локейшене - всё можно настроить гибко.
В данном случае состояния хранятся в зоне “one” размером 10 мегабайт, и средняя скорость обработки запросов для этой зоны не может превышать 1 запроса в секунду.
И вот последняя фраза меня смущает. Учитывая, что limit_req_zone задается в контексте http, выходит, что ограничение rate=1r/s для всех запросов задается