Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: location и $args
А существует универсальное решение для такого случая, когда за нгинксом
виртуальные хосты на апаче и нужно ограничивать ratelimit посещения любых
страниц, в которые передаются определенные аргументы? Не обязательно
индекс.пхп
-----Original Message-----
From: owner-nginx-ru@xxxxxxxxx [mailto:owner-nginx-ru@xxxxxxxxx] On Behalf
Of Maxim Dounin
Sent: Wednesday, August 19, 2009 12:44 AM
To: nginx-ru@xxxxxxxxx
Subject: Re: location и $args
Hello!
On Tue, Aug 18, 2009 at 09:34:28PM +0400, Alex Hudich wrote:
> Появился вопрос, ответ на который не смог отыскать в документах.
>
>
>
> Упрощенное описание ситуации: Проксрующий Nginx в связке с Apache. Есть
сайт
> с единой точкой входа index.php, конкретная страница выбирается с помощью
> передачи каких-либо аргументов, например index.php?catalogID=номер. Мне
> нужно ограничить количество обращений в единицу времени к странице
index.php
> в которую передается данный аргумент. Если аргумент не передается или
> передаются другие любые аргументы количество обращений к данной странице
> ограничивать не нужно.
>
>
>
> Можно ли такую проверку организовать в отдельном location? Поскольку в
> конструкцию if ($arg ~ catalogID ) { } limit_req или limit_conn
поместить
> нельзя. А когда я делаю location ~* catalogID {} у меня возникает
ощущение,
> что там проверяется только uri без параметров.
Совершенно верно, location проверяет только uri без аргументов.
> Есть какое-то решение?
Аргументы можно проверить через if внутри location, и уйти оттуда
в location с нужной конфигурацией через rewrite ... last.
Как-то так:
location = /index.php {
if ($arg_catalogid) {
rewrite ^ /index-limited.php last;
}
proxy_pass http://backend;
}
location = /index-limited.php {
limit_req ...
proxy_pass http://backend/index.php;
}
Maxim Dounin
|