Nginx — настройка ограничения на кол-во подключений и количество запросов в единицу времени

В Nginx есть возможность ограничить количество соединений с одного адреса(модуль ngx_http_limit_conn_module) и ограничить количество запросов в единицу времени с одного адреса (модуль ngx_http_limit_req_module)

— позволяет ограничить число соединений по заданному ключу, в частности, число соединений с одного IP-адреса.

– позволяет ограничить скорость обработки запросов по заданному ключу, в частности, скорость обработки запросов, поступающих с одного IP-адреса

 

Ограничение количества соединений с одного адреса

Задаёт параметры зоны разделяемой памяти, которая хранит состояние для разных значений ключа. Состояние в частности содержит текущее число соединений

 

( по умолчанию limit_conn_log_level error;)

Задаёт желаемый уровень записи в лог случаев ограничения числа соединений.

 

(По умолчанию limit_conn_status 503;)

Позволяет переопределить код ответа, используемый при отклонении запросов.

 

В секции http файла nginx.conf

Задаем ключ, к которому относятся ограничения ($binary_remote_addr), зону с именем connection и размер зоны 10 мегабайт

Изменяем уровень протоколирования ограничений соединения с error на warn

 

Задаёт зону разделяемой памяти и максимально допустимое число соединений для одного значения ключа. При превышении этого числа в ответ на запрос сервер вернёт ошибку 503 (Service Temporarily Unavailable)

 

Ограничиваем кол-во соединений с одного адреса – не более 8 в конфигурационном файле виртуального хоста

 

 

Ограничение количества запросов в секунду с одного адреса

 

Задаёт параметры зоны разделяемой памяти, которая хранит состояние для разных значений ключа. Состояние в частности хранит текущее число избыточных запросов.

 

( по умолчанию limit_conn_log_level error;)

Задаёт желаемый уровень записи в лог случаев отказа в обработке запросов при превышении скорости и случаев задержек при обработке запроса. Задержки записываются в лог с уровнем на единицу меньшим, чем отказы, например, если указано “limit_req_log_level warn”, то задержки будут записываться в лог на уровне notice.

 

(По умолчанию limit_req_status 503;)

Позволяет переопределить код ответа, используемый при отклонении запросов.

 

Ограничение количества запросов в секунду с одного адреса — не более 5 со всплесками не более 10 запросов

Изменяем уровень протоколирования ограничений соединения с error на warn

 

В секции http файла nginx.conf

…………….
}

 

Задаёт зону разделяемой памяти (zone) и максимальный размер всплеска запросов (burst). Если скорость поступления запросов превышает описанную в зоне, то их обработка задерживается так, чтобы запросы обрабатывались с заданной скоростью. Избыточные запросы задерживаются до тех пор, пока их число не превысит максимальный размер всплеска. При превышении запрос завершается с ошибкой 503 (Service Temporarily Unavailable). По умолчанию максимальный размер всплеска равен нулю

 

В конфигурационном файле виртуального хоста

 

Если же избыточные запросы в пределах лимита всплесков задерживать не требуется, то следует использовать параметр nodelay:

 

 

Ограничения можно устанавливать,как для всего виртуального хоста (в директиве server), так и для отдельных location

Например, при связке Nginx+PHP-FPM можно устанавливать ограничения на количество запросов в секунду к php-файлам

 

В конфигурационном файле виртуального хоста

}

 

Источник:

http://nginx.org/ru/docs/http/ngx_http_limit_conn_module.html

http://nginx.org/ru/docs/http/ngx_http_limit_req_module.html

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.

Яндекс.Метрика