Spec-Zone.ru › nginx

Модуль ngx_http_limit_conn_module

  • Пример конфигурации
  • Директивы
  • limit_conn
  • limit_conn_dry_run
  • limit_conn_log_level
  • limit_conn_status
  • limit_conn_zone
  • limit_zone
  • Встроенные переменные

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

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

Пример конфигурации

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    ...

    server {

        ...

        location /download/ {
            limit_conn addr 1;
        }

Директивы

Синтаксис: limit_conn zone number;
По умолчанию: —
Контекст: http, server, location

Устанавливает зону общей памяти и максимальное допустимое количество подключений для заданного значения ключа. При превышении этого лимита сервер вернет ошибку в ответ на запрос. Например, директивы

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    location /download/ {
        limit_conn addr 1;
    }

разрешают только одно подключение с одного IP-адреса за раз.

В HTTP/2 и HTTP/3 каждый одновременный запрос считается отдельным подключением.

Может быть несколько директивы 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 on | off;
По умолчанию: limit_conn_dry_run off;
Контекст: http, server, location

Данная директива появилась в версии 1.17.6.

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

Синтаксис: limit_conn_log_level info | notice | warn | error;
По умолчанию: limit_conn_log_level error;
Контекст: http, server, location

Данная директива появилась в версии 0.8.18.

Устанавливает желаемый уровень ведения журнала для случаев, когда сервер ограничивает количество подключений.

Синтаксис: limit_conn_status code;
По умолчанию: limit_conn_status 503;
Контекст: http, server, location

Данная директива появилась в версии 1.3.15.

Устанавливает код состояния, который должен быть возвращен в ответ на отклоненные запросы.

Синтаксис: limit_conn_zone key zone=name:size;
По умолчанию: —
Контекст: http

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

До версии 1.7.6, зона key могла содержать ровно одну переменную.

Пример использования:

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-битных платформах. Одна мегабайтовая зона может хранить около 32 тысяч 32-байтовых состояний или около 16 тысяч 64-байтовых состояний. Если хранилище зоны исчерпано, сервер вернёт ошибку всем последующим запросам.

Кроме того, в рамках нашей коммерческой подписки, информация о состоянии каждой такой зоны общей памяти может быть получена или сброшена с помощью API начиная с версии 1.17.7.
Синтаксис: limit_zone name $variable size;
По умолчанию: —
Контекст: http

Данная директива устарела в версии 1.1.8 и была удалена в версии 1.7.6. Вместо неё следует использовать эквивалентную директиву limit_conn_zone с изменённым синтаксисом:

limit_conn_zone $variable zone=name:size;

Встроенные переменные

$limit_conn_status
сохраняет результат ограничения количества подключений (1.17.6): PASSED, REJECTED, или REJECTED_DRY_RUN

© 2002-2021 Igor Sysoev
© 2011-2024 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API