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