Limit Conn#
Позволяет ограничить число соединений по заданному ключу, в частности, число соединений с одного IP-адреса.
Учитываются не все соединения, а лишь те, в которых имеются запросы, обрабатываемые сервером, и заголовок запроса уже прочитан.
Пример конфигурации#
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
server {
...
location /download/ {
limit_conn addr 1;
}
Директивы#
limit_conn#
Задает зону разделяемой памяти и максимально допустимое число соединений для одного значения ключа. При превышении этого числа в ответ на запрос сервер вернет ошибку. Например, директивы
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location /download/ {
limit_conn addr 1;
}
разрешают одновременно обрабатывать не более одного соединения с одного IP-адреса.
Примечание
В HTTP/2 и SPDY каждый параллельный запрос считается отдельным соединением.
Директив limit_conn может быть несколько. Например, следующая конфигурация ограничивает число соединений с сервером с одного клиентского IP-адреса и в то же время ограничивает общее число соединений с виртуальным сервером:
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
...
limit_conn perip 10;
limit_conn perserver 100;
}
Директивы наследуются с предыдущего уровня конфигурации при условии, что на данном уровне не описаны свои директивы limit_conn.
limit_conn_dry_run#
|
|
По умолчанию |
|
http, server, location |
Включает режим пробного запуска. В данном режиме число соединений не ограничивается, однако в зоне разделяемой памяти текущее число избыточных соединений учитывается как обычно.
limit_conn_log_level#
|
|
По умолчанию |
|
http, server, location |
Задает желаемый уровень записи в лог случаев ограничения числа соединений.
limit_conn_status#
|
|
По умолчанию |
|
http, server, location |
Позволяет переопределить код ответа, используемый при отклонении запросов.
limit_conn_zone#
Задает параметры зоны разделяемой памяти, которая хранит состояние для разных значений ключа. Состояние в частности содержит текущее число соединений. В качестве ключа можно использовать текст, переменные и их комбинации. Запросы с пустым значением ключа не учитываются.
Пример использования:
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 байтам для IPv4-адресов или 16 байтам для IPv6-адресов. При этом размер состояния всегда равен 32 или 64 байтам на 32-битных платформах и 64 байтам на 64-битных.
В зоне размером 1 мегабайт может разместиться около 32 тысяч состояний размером 32 байта или 16 тысяч состояний размером 64 байта. При переполнении зоны в ответ на последующие запросы сервер будет возвращать ошибку.
Встроенные переменные#
$limit_conn_status
#
хранит результат ограничения числа соединений: PASSED, REJECTED или REJECTED_DRY_RUN