Rate this post

В nginx существует ngx_http_limit_conn_module, с помощью которого возможно ограничения количества соединений по определенному условию, например ограничить число соединений с одного IP адреса.nnВ учет идет не все конекты, а только те в которых есть запросы, для обработки сервером и заголовок прочитан.n

http {n    limit_conn_zone $binary_remote_addr zone=addr:10m;nn    ...nn    server {nn        ...nn        location /download/ {n            limit_conn addr 1;n        }
n

n

n

n

n

n

n

n

n

n

n

Синтаксис: limit_conn зона число;
Где размещается: httpserverlocation

nОпределяем максимальное значение одного условия. Если превышается значение «числа», то в ответ сервер выдает ошибку 503 (сервис временно не доступен). Примерn

limit_conn_zone $binary_remote_addr zone=addr:10m;nnserver {n    location /download/ {n        limit_conn addr 5;n    }

Разрешаем не более 5ти подключений с одного IP адреса.nnВ HTTP/2 и SPDY  параллельные запросы обрабатываются как отдельные соединения, учитывайте это при указании количества соединений.nnВозможно указывать одновременно несколько различных условий, при этом будет обработано любой из них.n

limit_conn_zone $binary_remote_addr zone=perip:10m;nlimit_conn_zone $server_name zone=perserver:10m;nnserver {n    ...n    limit_conn perip 5;n    limit_conn perserver 100;n}

В данном примере два условия ограничения по подключению с одного IP адреса, а так же ограничивается общее количество подключений к виртуальному хосту.nПри подключении директив используется принцип наследования, если данные директивы не переопределены на своем уровне.n

n

n

n

n

n

n

n

n

n

n

n

n

n

n

n

Синтаксис: limit_conn_log_level info | notice | warn | error;
Значение по умолчанию: n

limit_conn_log_level error;
Где размещается: httpserverlocation

nЕсть возможность изменить код ответа сервера при обработки ограниченийn

n

n

n

n

n

n

n

n

n

n

n

Синтаксис: limit_conn_zone ключ zone=название:размер;
Где размещается: http

n

limit_conn_zone $binary_remote_addr zone=addr:10m;

Определяет параметр в памяти, для хранения состояния условия. Здесь в качестве условия используется IP адрес. Отличие $remote_addr и переменной $binary_remote_addr, заключается в размере значения длины переменной. Длина $remote_addr -7-15байт, а значение которое она хранит может быть 32 или 64 байта на 32х системах и 64 байта на 64х битных системах. Перемененная $binary_remote_addr -4байта и значение 32 байта 32 битных системах и 64 байта на 64 битных. При переполнении размера зоны, ошибка 503.n

Замучили постоянные попытки атак на сервер и сайты, мы поможем Вам настроить защиту вашего сервера и ограничить доступ к сайтам недоброжелателей. Подробнее [email protected]