Mercurial > hg > nginx-site
view xml/ru/docs/http/ngx_http_limit_conn_module.xml @ 2518:b4f57de67730
Updated with Netcraft March 2020 Web Server Survey stats.
author | Yaroslav Zhuravlev <yar@nginx.com> |
---|---|
date | Tue, 24 Mar 2020 10:30:09 +0000 |
parents | e4332b7580bb |
children | eeed494bba51 |
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="13"> <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>