Re: Ограничение по количеству соединений для несвоих
Ruslan Ermilov
ru на nginx.com
Чт Фев 2 11:03:21 UTC 2012
On Thu, Feb 02, 2012 at 12:33:21PM +0400, Maxim Dounin wrote:
> Hello!
>
> On Thu, Feb 02, 2012 at 11:52:24AM +0400, Ilya Lobahin wrote:
>
> > Здравствуйте, коллеги.
> >
> > Хочется ограничить количество соединений на IP для всех, кроме некого,
> > избранного списка IP-адресов.
> > Вариантов реализации через nginx не нашел.
> > Это я плохо смотрел или так оно и есть.
> >
> > P.S. Дятлы задолбали.
>
> Как-то так должно работать:
>
> geo $white {
> default "0";
> 127.0.0.1 "1";
> 192.168.0.0/16 "1";
> }
>
> map $white $limit_addr {
> default $binary_remote_addr;
> "1" "";
> }
>
> limit_conn_zone $limit_addr zone=one:10m;
> limit_conn one 5;
>
> Смысл состоит в том, чтобы для "адресов из избранного списка" в
> переменную, по которой установлено ограничение, попала пустая
> строка.
Вот ещё один способ, кому-то он подойдёт больше. Он раскидывает
клиентов по разным location'ам, в которых могут быть свои ограничения.
http {
geo $config {
default slow;
127.0.0.1 fast;
10.0.0.0/8 fast;
}
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location / {
error_page 418 = @$config;
return 418;
}
location @fast {
}
location @slow {
limit_conn addr 1;
limit_rate 100k;
}
}
}
P.S. Спасибо Максиму Дунину за помощь в доведении этого конфига до
рабочего состояния.
Подробная информация о списке рассылки nginx-ru