ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
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



 




Copyright © Lexa Software, 1996-2009.