Модуль 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$variablezone=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