view xml/ru/docs/http/ngx_http_limit_conn_module.xml @ 2769:16f6fa718be2

Updated TLSv1.3 support notes. Previous notes described some early development snapshot of OpenSSL 1.1.1 with disabled TLSv1.3 by default. It was then enabled in the first alpha. Further, the updated text covers later major releases such as OpenSSL 3.0.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 30 Sep 2021 16:29:20 +0300
parents eeed494bba51
children a85e4d126bc7
line wrap: on
line source

<?xml version="1.0"?>

<!--
  Copyright (C) Igor Sysoev
  Copyright (C) Nginx, Inc.
  -->

<!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">

<module name="Модуль ngx_http_limit_conn_module"
        link="/ru/docs/http/ngx_http_limit_conn_module.html"
        lang="ru"
        rev="14">

<section id="summary">

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

<para>
Учитываются не все соединения, а лишь те, в которых имеются
запросы, обрабатываемые сервером, и заголовок запроса уже прочитан.
</para>

</section>


<section id="example" name="Пример конфигурации">

<para>
<example>
http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    ...

    server {

        ...

        location /download/ {
            limit_conn addr 1;
        }
</example>
</para>

</section>


<section id="directives" name="Директивы">

<directive name="limit_conn">
<syntax><value>зона</value> <value>число</value></syntax>
<default/>
<context>http</context>
<context>server</context>
<context>location</context>

<para>
Задаёт зону разделяемой памяти и максимально допустимое число соединений
для одного значения ключа.
При превышении этого числа в ответ на запрос сервер вернёт
<link id="limit_conn_status">ошибку</link>.
Например, директивы
<example>
limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    location /download/ {
        limit_conn addr 1;
    }
</example>
разрешают одновременно обрабатывать не более одного соединения с одного
IP-адреса.
<note>
В HTTP/2 и SPDY каждый параллельный запрос считается отдельным соединением.
</note>
</para>

<para>
Директив <literal>limit_conn</literal> может быть несколько.
Например, следующая конфигурация ограничивает число соединений с сервером
с одного клиентского IP-адреса и в то же время ограничивает общее число
соединений с виртуальным сервером:
<example>
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;
}
</example>

</para>

<para>
Директивы наследуются с предыдущего уровня конфигурации при условии, что
на данном уровне не описаны свои директивы <literal>limit_conn</literal>.
</para>

</directive>


<directive name="limit_conn_dry_run">
<syntax><literal>on</literal> | <literal>off</literal></syntax>
<default>off</default>
<context>http</context>
<context>server</context>
<context>location</context>
<appeared-in>1.17.6</appeared-in>

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

</directive>


<directive name="limit_conn_log_level">
<syntax>
<literal>info</literal> |
<literal>notice</literal> |
<literal>warn</literal> |
<literal>error</literal></syntax>
<default>error</default>
<context>http</context>
<context>server</context>
<context>location</context>
<appeared-in>0.8.18</appeared-in>

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

</directive>


<directive name="limit_conn_status">
<syntax><value>код</value></syntax>
<default>503</default>
<context>http</context>
<context>server</context>
<context>location</context>
<appeared-in>1.3.15</appeared-in>

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

</directive>


<directive name="limit_conn_zone">
<syntax>
    <value>ключ</value>
    <literal>zone</literal>=<value>название</value>:<value>размер</value></syntax>
<default/>
<context>http</context>

<para>
Задаёт параметры зоны разделяемой памяти, которая хранит состояние
для разных значений ключа.
Состояние в частности содержит текущее число соединений.
В качестве ключа можно использовать текст, переменные и их комбинации.
Запросы с пустым значением ключа не учитываются.
<note>
До версии 1.7.6 в качестве ключа можно было задать ровно одну переменную.
</note>
Пример использования:
<example>
limit_conn_zone $binary_remote_addr zone=addr:10m;
</example>
Здесь в качестве ключа используется IP-адрес клиента.
Обратите внимание, что вместо переменной <var>$remote_addr</var>
использована переменная <var>$binary_remote_addr</var>.
Длина значения переменной <var>$remote_addr</var> может колебаться
от 7 до 15 байт, при этом размер хранимого состояния составляет
либо 32, либо 64 байта на 32-битных платформах и всегда 64
байта на 64-битных.
Длина значения переменной <var>$binary_remote_addr</var> всегда
равна 4 байтам для IPv4-адресов или 16 байтам для IPv6-адресов.
При этом размер состояния всегда равен 32 или 64 байтам
на 32-битных платформах и 64 байтам на 64-битных.
В зоне размером 1 мегабайт может разместиться около 32 тысяч состояний
размером 32 байта или 16 тысяч состояний размером 64 байта.
При переполнении зоны в ответ на последующие запросы сервер будет
возвращать
<link id="limit_conn_status">ошибку</link>.
</para>

<para>
<note>
Дополнительно, как часть
<commercial_version>коммерческой подписки</commercial_version>,
<link doc="ngx_http_api_module.xml" id="http_limit_conns_">информацию о состоянии</link>
каждой такой зоны разделяемой памяти можно
<link doc="ngx_http_api_module.xml" id="getHttpLimitConnZone">получить</link> или
<link doc="ngx_http_api_module.xml" id="deleteHttpLimitConnZoneStat">сбросить</link>
при помощи <link doc="ngx_http_api_module.xml">API</link>
начиная с версии 1.17.7.
</note>
</para>

</directive>


<directive name="limit_zone">
<syntax>
    <value>название</value>
    <value>$переменная</value>
    <value>размер</value></syntax>
<default/>
<context>http</context>

<para>
Эта директива устарела в версии 1.1.8
и была удалена в версии 1.7.6.
Вместо неё следует
использовать аналогичную директиву <link id="limit_conn_zone"/>
с изменённым синтаксисом:
<note>
<literal>limit_conn_zone</literal>
<value>$переменная</value>
<literal>zone</literal>=<value>название</value>:<value>размер</value>;
</note>
</para>

</directive>

</section>


<section id="variables" name="Встроенные переменные">

<para>
<list type="tag">

<tag-name id="var_limit_conn_status"><var>$limit_conn_status</var></tag-name>
<tag-desc>
хранит результат ограничения числа соединений (1.17.6):
<literal>PASSED</literal>,
<literal>REJECTED</literal> или
<literal>REJECTED_DRY_RUN</literal>
</tag-desc>

</list>
</para>

</section>

</module>