В 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 }
Синтаксис: | limit_conn |
---|---|
Где размещается: | http , server , location |
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
Синтаксис: | limit_conn_log_level |
---|---|
Значение по умолчанию: | n
limit_conn_log_level error; |
Где размещается: | http , server , location |
nЕсть возможность изменить код ответа сервера при обработки ограниченийn
Синтаксис: | limit_conn_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]