Персональный
сайт
Игоря
Сысоева


 
english
 
sysoev.ru
 
nginx
 поехали!    
 документация    
 поддержка    
 изменения    
 скачать    
 ссылки    
 
mod_accel
mod_realip
mod_deflate
программирование
всякая всячина
windows
freebsd
apache
pppd
unix
web
 
обо мне
для писем
для денег
 

Директивы модуля ngx_http_limit_req_module

 

06.10.2009

Модуль ngx_http_limit_req_module (0.7.21) позволяет ограничить число запросов для заданной сессии или, как частный случай, с одного адреса. Ограничение делается с помощью метода leaky bucket.

Содержание

Пример конфигурации
Директивы
limit_req_zone
limit_req
limit_req_log_level

Пример конфигурации

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

    ...

    server {

        ...

        location /search/ {
            limit_req   zone=one  burst=5;
        }

Директивы


syntax: limit_req_zone $переменная zone=название:размер rate=скорость
default: нет
context: http

Директива описывает зону, в которой хранятся состояния сессий. Значения сессий определяется заданной переменной. Пример использования:

limit_req_zone  $binary_remote_addr  zone=one:10m   rate=1r/s;

В данном случае состояния сессий хранятся в зоне "one" размером 10 мегабайт и средняя скорость запросов для этой зоны не может более 1 запроса в секунду.

В качестве сессии используется адрес клиента. Обратите внимание, что вместо переменной $remote_addr используется переменная $binary_remote_addr, позволяющая уменьшить размер состояния до 64 байт. В зоне размером 1 мегабайт может разместиться около 16000 состояний размером 64 байта.

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


syntax: limit_req zone=название burst=число [nodelay]
default: нет
context: http, server, location

Директива задаёт зону (zone) и максимально возможные всплески запросов (burst). Если скорость запросов превышает описанную в зоне, то их обработка запроса задерживается так, чтобы запросы обрабывались с заданной скоростью. Избыточные запросы задерживаются до тех пор, пока их число не превысит заданное число всплесков. В этом случае запрос завершается кодом "Service unavailable" (503). По умолчанию число всплесков равно нулю. Например, директивы

limit_req_zone  $binary_remote_addr  zone=one:10m   rate=1r/s;

    server {
        location /search/ {
            limit_req   zone=one  burst=5;
        }

позволяют в среднем не более 1 запроса в секунду со всплесками не более 5 запросов.

Если же избыточные запросы в пределах лимита всплесков задерживать не надо, то нужно использовать параметр nodelay:

            limit_req   zone=one  burst=5  nodelay;


syntax: limit_req_log_level [info|notice|warn|error]
default: limit_req_log_level error
context: http, server, location

Директива (0.8.18) задаёт уровень логирования случаев ограничения числа запросов и задержек при обработке запроса. Задержки логируются на один уровень ниже, чем ограничения, например, если задан "limit_req_log_level notice", то задержки будут логироваться на уровне info.


(C) Игорь Сысоев
http://sysoev.ru