view xml/ru/docs/http/ngx_http_limit_conn_module.xml @ 2013:469aebbd94d0

Limit_req/limit_conn may return not only 503 on failure.
author Ruslan Ermilov <ru@nginx.com>
date Tue, 08 Aug 2017 09:23:25 +0300
parents 6c96a644b0b3
children 5d7fd7d9a2b6
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="10">

<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_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>

</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>

</module>