location и $args
Maxim Dounin
mdounin at mdounin.ru
Wed Aug 19 00:44:16 MSD 2009
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
More information about the nginx-ru
mailing list