limit_conn

Vadim Pronin nginx at mail.pronin.com
Thu Aug 14 12:32:56 MSD 2008


Hello Maxim,

Wednesday, August 13, 2008, 5:49:56 PM, you wrote:

>>подскажите пожалуйста как правильно прописать в конфиге ограничение на
>>количество соединений с одного IP таким образом чтобы для одних IP
>>было одно ограничение, для других - другое.
>>
>>В моем случае есть сервер раздающий большие файлы.
>>Нужно чтобы все пользователи могли качать в 3 потока, а пользователи с
>>определенных IP - без ограничений (ну или в 100 потоков).
>>
>>Я уже отделил нужных пользователей через geo:
>>
>>limit_zone one $binary_remote_addr 10m;
>>
>>geo $userlimit {
>> default      3;
>> x.x.x.x/32   100;
>>}
>>
>>что с этим делать дальше?
>>
>>limit_conn one $userlimit; - не работает (не воспринимает $userlimit
>>как значение)
>>
>>if ($userlimit = '3')
>>{
>> limit_conn one 3;
>>}
>>
>>тоже не работает т.к. limit_conn не может быть внутри IF..
>>
>>Как правильно все это прописать???

> Совсем тупой вариант - rewrite в другой location и другой 
> limit_conn уже там. 

Пытался...

допустим есть

location / {
root /data
 if ($userlimit = '100')
  {
   rewrite ^(.*)$ /unlimit/$1 last;
  }
limit_conn 3
}

location /unlimit {
root /data
limit_conn 100
}

Получается что если обычный юзер просит файл http://server/file.ext то
ему нормально отдается /data/file.ext
Но если "безлимитный" юзер просит тот же файл, nginx пытается уже
найти файл /data/unlimit/file.ext не смотря на то что root для
локейшена /unlimit прописан такой же как для /

Попытки использовать named location (@) тоже особо ни к чему не привели..
Возможно потому что я не до конца понимаю в чем их суть (они
практически не документированы), а возможно потому что они
предназначены для чего-то другого...

В любом случае, проблема остается...

-- 
Best regards,
 Vadim                            mailto:nginx at mail.pronin.com






More information about the nginx-ru mailing list