view xml/ru/docs/http/ngx_http_limit_req_module.xml @ 351:a4fa80755eab

Consistently strip initial offset in examples.
author Ruslan Ermilov <ru@nginx.com>
date Tue, 24 Jan 2012 11:01:22 +0000
parents 4c6d2c614d2c
children bb51d3e17dd0
line wrap: on
line source

<?xml version="1.0"?>

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

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

<section id="summary">

<para>
Модуль <literal>ngx_http_limit_req_module</literal> (0.7.21) позволяет
ограничить число запросов
по заданному ключу или, как частный случай, число запросов с одного IP-адреса.
Ограничение делается с помощью метода “leaky bucket”.
</para>

</section>

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

<para>
<example>
http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    ...

    server {

        ...

        location /search/ {
            limit_req zone=one burst=5;
        }
</example>
</para>

</section>


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

<directive name="limit_req">
<syntax>
    <literal>zone</literal>=<value>название</value>
    [<literal>burst</literal>=<value>число</value>]
    [<literal>nodelay</literal>]</syntax>
<default/>
<context>http</context>
<context>server</context>
<context>location</context>

<para>
Директива задаёт зону (zone) и максимально возможные всплески запросов (burst).
Если скорость запросов превышает описанную в зоне,
то их обработка задерживается так, чтобы запросы обрабатывались
с заданной скоростью.
Избыточные запросы задерживаются до тех пор, пока их число
не превысит заданное число всплесков.
В этом случае запрос завершается с ошибкой
<http-status code="503" text="Service Temporarily Unavailable"/>.
По умолчанию число всплесков равно нулю.
Например, директивы
<example>
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
    location /search/ {
        limit_req zone=one burst=5;
    }
</example>
позволяют в среднем не более 1 запроса в секунду
со всплесками не более 5 запросов.
</para>

<para>
Если же избыточные запросы в пределах лимита всплесков задерживать
не требуется, то следует использовать параметр <literal>nodelay</literal>:
<example>
limit_req zone=one burst=5 nodelay;
</example>
</para>

</directive>


<directive name="limit_req_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>
Директива задаёт желаемый уровень записи в лог случаев ограничения
числа запросов и задержек при обработке запроса.
Задержки записываются в лог с уровнем на единицу меньшим, чем ограничения,
например, если указано “<literal>limit_req_log_level notice</literal>”,
то задержки будут записываться в лог на уровне <literal>info</literal>.
</para>

</directive>


<directive name="limit_req_zone">
<syntax>
    <value>$переменная</value>
    <literal>zone</literal>=<value>название</value>:<value>размер</value>
    <literal>rate</literal>=<value>скорость</value></syntax>
<default/>
<context>http</context>

<para>
Директива задаёт параметры зоны,
которая хранит состояние для разных значений ключа.
Состояние в частности хранит текущее число запросов.
Ключом является значение заданной переменной.
Пример использования:
<example>
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
</example>
</para>

<para>
В данном случае состояния хранятся в зоне “one” размером 10 мегабайт,
и средняя скорость запросов для этой зоны не может превышать
1 запроса в секунду.
</para>

<para>
В качестве ключа используется IP-адрес клиента.
Обратите внимание, что вместо переменной <var>$remote_addr</var> используется
переменная <var>$binary_remote_addr</var>, позволяющая уменьшить
размер состояния до 64 байт.
В зоне размером 1 мегабайт может разместиться около 16 тысяч состояний
размером 64 байта.
При переполнении зоны в ответ на последующие запросы сервер будет
возвращать ошибку
<http-status code="503" text="Service Temporarily Unavailable"/>.
</para>

<para>
Скорость задаётся в запросах в секунду (r/s).
Если же нужна скорость меньше одного запроса в секунду,
то она задаётся в запросах в минуту (r/m), например,
ползапроса в секунду — это 30r/m.
</para>

</directive>

</section>

</module>