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