|
Модуль 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 зона число;
|
|
умолчание:
|
—
|
|
контекст:
|
http, server, location
|
Задаёт зону разделяемой памяти и максимально допустимое число соединений
для одного значения ключа.
При превышении этого числа в ответ на запрос сервер вернёт ошибку
503 (Service Temporarily Unavailable).
Например, директивы
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location /download/ {
limit_conn addr 1;
}
разрешают одновременно обрабатывать не более одного соединения с одного
IP-адреса.
Допустимо одновременное указание нескольких директив
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_log_level
info |
notice |
warn |
error;
|
|
умолчание:
|
limit_conn_log_level error;
|
|
контекст:
|
http, server, location
|
Эта директива появилась в версии 0.8.18.
Задаёт желаемый уровень записи в лог случаев ограничения
числа соединений.
|
синтаксис:
|
limit_conn_zone
$переменная
zone=название:размер;
|
|
умолчание:
|
—
|
|
контекст:
|
http
|
Задаёт параметры зоны разделяемой памяти, которая хранит состояние
для разных значений ключа.
Состояние в частности хранит текущее число соединений.
Ключом является любое непустое значение заданной переменной
(пустые значения не учитываются).
Пример использования:
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-битных.
В зоне размером 1 мегабайт может разместиться около 32 тысяч состояний
размером 32 байта, или 16 тысяч состояний размером 64 байта.
При переполнении зоны в ответ на последующие запросы сервер будет
возвращать ошибку
503 (Service Temporarily Unavailable).
|
синтаксис:
|
limit_zone
название
$переменная
размер;
|
|
умолчание:
|
—
|
|
контекст:
|
http
|
Эта директива устарела в версии 1.1.8, вместо неё следует
использовать аналогичную директиву limit_conn_zone
с изменённым синтаксисом:
limit_conn_zone
$переменная
zone=название:размер;
|