Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: limit_conn
Hello!
On Thu, Aug 14, 2008 at 11:32:56AM +0300, Vadim Pronin wrote:
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 прописан такой же как для /
Root прописан такой же, а url - другой. Читать про alias.
Maxim Dounin
Попытки использовать named location (@) тоже особо ни к чему не привели..
Возможно потому что я не до конца понимаю в чем их суть (они
практически не документированы), а возможно потому что они
предназначены для чего-то другого...
В любом случае, проблема остается...
--
Best regards,
Vadim mailto:nginx@xxxxxxxxxxxxxxx
|