Re: переменный limit req zone
Валентин Бартенев
vbart at nginx.com
Fri Mar 22 00:14:06 UTC 2013
On Friday 22 March 2013 00:51:47 cat wrote:
> Приветствую.
> Пусть есть простой запрос:
>
> http://127.0.0.1/api?username=testuser
>
> Хочу ограничивать кол-во cоединений в единицу времени в зависимости от
> имени пользователя в параметре: кому-то разрешить больше запросов, кому-то
> меньше. В идеале это выглядело бы как-то так:
>
> ###
> map $arg_username $limits {
> bob 100;
> alice 300;
> default 10;
> }
>
> limit_req_zone $limits zone=per_user_limit:10m rate=$limitsr/s;
> ###
>
> Если бы не ошибка:
>
> 2013/03/21 22:34:25 [emerg] 17212#0: invalid rate "rate=$limitsr/m" in
> /etc/nginx/nginx.conf:44
>
> Есть ли способ выставлять rate для limit_req_zone динамически?
>
Иными словами вы хотите описать несколько зон с разным rate. Да, конечно
это возможно:
map $arg_username $is_bob {
bob 1;
}
map $arg_username $is_alice {
alice 1;
}
map $arg_username $is_default {
dafault 1;
bob "";
alice "";
}
limit_req_zone $is_bob zone=user_bob:32k rate=100r/s;
limit_req_zone $is_alice zone=user_alice:32k rate=300r/s;
limit_req_zone $is_default zone=default_limit:32k rate=10r/s;
location / {
limit_req zone=default_limit;
limit_req zone=user_bob;
limit_req zone=user_alice;
}
--
Валентин Бартенев
http://nginx.org/en/donation.html
Подробная информация о списке рассылки nginx-ru