comparison xml/ru/docs/http/ngx_http_limit_req_module.xml @ 179:8cc01e2179a9

- Reflected recent changes made to ngx_http_limit_conn_module. - Revamped documentation for ngx_http_limit_req_module. - Translated ngx_http_limit_{conn,req}_module into English.
author Ruslan Ermilov <ru@nginx.com>
date Mon, 14 Nov 2011 18:09:03 +0000
parents 40eec261c2a6
children bfe3eff81d04
comparison
equal deleted inserted replaced
178:65431179fb8f 179:8cc01e2179a9
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 2
3 <!DOCTYPE module SYSTEM "../../../../dtd/module.dtd"> 3 <!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">
4 4
5 <module name="Директивы модуля ngx_http_limit_req_module" 5 <module name="Модуль ngx_http_limit_req_module"
6 link="/ru/docs/http/ngx_http_limit_req_module.html" 6 link="/ru/docs/http/ngx_http_limit_req_module.html"
7 lang="ru"> 7 lang="ru">
8 8
9 <section id="summary"> 9 <section id="summary">
10 10
11 <para> 11 <para>
12 Модуль ngx_http_limit_req_module (0.7.21) позволяет ограничить число запросов 12 Модуль ngx_http_limit_req_module (0.7.21) позволяет ограничить число запросов
13 для заданной сессии или, как частный случай, с одного адреса. 13 по заданному ключу или, как частный случай, число запросов с одного IP-адреса.
14 Ограничение делается с помощью метода leaky bucket. 14 Ограничение делается с помощью метода “leaky bucket”.
15 </para> 15 </para>
16 16
17 </section> 17 </section>
18 18
19 <section name="Пример конфигурации" id="example"> 19 <section name="Пример конфигурации" id="example">
20 20
21 <para> 21 <para>
22 <example> 22 <example>
23 http { 23 http {
24 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; 24 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
25 25
26 ... 26 ...
27 27
28 server { 28 server {
29 29
30 ... 30 ...
31 31
32 location /search/ { 32 location /search/ {
33 limit_req zone=one burst=5; 33 limit_req zone=one burst=5;
34 } 34 }
35 </example> 35 </example>
36 </para> 36 </para>
37 37
38 </section> 38 </section>
39 39
40 40
41 <section name="Директивы" id="directives"> 41 <section name="Директивы" id="directives">
42 42
43 <directive name="limit_req_zone"> 43 <directive name="limit_req">
44 <syntax><value>$переменная zone=название:размер 44 <syntax>
45 rate=скорость</value></syntax> 45 <parameter>zone</parameter>=<argument>название</argument>
46 [<parameter>burst</parameter>=<argument>число</argument>]
47 [<parameter>nodelay</parameter>]
48 </syntax>
46 <default/> 49 <default/>
47 <context>http</context> 50 <context>http</context>
48 51 <context>server</context>
49 <para> 52 <context>location</context>
50 Директива описывает зону, в которой хранятся состояния сессий.
51 Значения сессий определяется заданной переменной.
52 Пример использования:
53 <example>
54 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
55 </example>
56 </para>
57
58 <para>
59 В данном случае состояния сессий хранятся в зоне "one" размером 10 мегабайт
60 и средняя скорость запросов для этой зоны не может более 1 запроса в секунду.
61 </para>
62
63 <para>
64 В качестве сессии используется адрес клиента.
65 Обратите внимание, что вместо переменной $remote_addr используется
66 переменная $binary_remote_addr, позволяющая уменьшить размер состояния
67 до 64 байт.
68 В зоне размером 1 мегабайт может разместиться около 16 000 состояний
69 размером 64 байта.
70 </para>
71
72 <para>
73 Скорость задаётся в запросах в секунду.
74 Если же нужна скорость меньше одного запроса в секунду,
75 то она задаётся в запросах в минуту, например,
76 ползапроса в секунду — это 30r/m.
77 </para>
78
79 </directive>
80
81 <directive name="limit_req">
82 <syntax><value>zone=название burst=число [nodelay]</value>
83 </syntax>
84 <default/>
85 <context>http, server, location</context>
86 53
87 <para> 54 <para>
88 Директива задаёт зону (zone) и максимально возможные всплески запросов (burst). 55 Директива задаёт зону (zone) и максимально возможные всплески запросов (burst).
89 Если скорость запросов превышает описанную в зоне, 56 Если скорость запросов превышает описанную в зоне,
90 то их обработка запроса задерживается так, чтобы запросы обрабывались 57 то их обработка задерживается так, чтобы запросы обрабатывались
91 с заданной скоростью. 58 с заданной скоростью.
92 Избыточные запросы задерживаются до тех пор, пока их число 59 Избыточные запросы задерживаются до тех пор, пока их число
93 не превысит заданное число всплесков. 60 не превысит заданное число всплесков.
94 В этом случае запрос завершается кодом "Service unavailable" (503). 61 В этом случае запрос завершается с ошибкой
62 <http-status code="503" text="Service Temporarily Unavailable"/>.
95 По умолчанию число всплесков равно нулю. 63 По умолчанию число всплесков равно нулю.
96 Например, директивы 64 Например, директивы
97 <example> 65 <example>
98 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; 66 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
99 67
100 server { 68 server {
101 location /search/ { 69 location /search/ {
102 limit_req zone=one burst=5; 70 limit_req zone=one burst=5;
103 } 71 }
104 72
105 </example> 73 </example>
106 позволяют в среднем не более 1 запроса в секунду 74 позволяют в среднем не более 1 запроса в секунду
107 со всплесками не более 5 запросов. 75 со всплесками не более 5 запросов.
108 </para> 76 </para>
109 77
110 <para> 78 <para>
111 Если же избыточные запросы в пределах лимита всплесков задерживать 79 Если же избыточные запросы в пределах лимита всплесков задерживать
112 не надо, то нужно использовать параметр nodelay: 80 не требуется, то следует использовать параметр <parameter>nodelay</parameter>:
113 <example> 81 <example>
114 limit_req zone=one burst=5 nodelay; 82 limit_req zone=one burst=5 nodelay;
115 </example> 83 </example>
116 </para> 84 </para>
117 85
118 </directive> 86 </directive>
119 87
120 88
121 <directive name="limit_req_log_level"> 89 <directive name="limit_req_log_level">
122 <syntax><value>[info|notice|warn|error]</value></syntax> 90 <syntax>
91 <value>info</value> |
92 <value>notice</value> |
93 <value>warn</value> |
94 <value>error</value>
95 </syntax>
123 <default>error</default> 96 <default>error</default>
124 <context>http, server, location</context> 97 <context>http</context>
98 <context>server</context>
99 <context>location</context>
100 <appeared-in>0.8.18</appeared-in>
125 101
126 <para> 102 <para>
127 Директива (0.8.18) задаёт уровень логирования случаев ограничения 103 Директива задаёт желаемый уровень записи в лог случаев ограничения
128 числа запросов и задержек при обработке запроса. 104 числа запросов и задержек при обработке запроса.
129 Задержки логируются на один уровень ниже, чем ограничения, например, 105 Задержки записываются в лог с уровнем на единицу меньшим, чем ограничения,
130 если задан "limit_req_log_level notice", то задержки будут логироваться 106 например, если указано <command>limit_req_log_level notice</command>,
131 на уровне info. 107 то задержки будут записываться в лог на уровне <value>info</value>.
108 </para>
109
110 </directive>
111
112
113 <directive name="limit_req_zone">
114 <syntax>
115 <argument>$переменная </argument>
116 <parameter>zone</parameter>=<argument>название</argument>:<argument>размер </argument>
117 <parameter>rate</parameter>=<argument>скорость</argument>
118 </syntax>
119 <default/>
120 <context>http</context>
121
122 <para>
123 Директива задаёт параметры зоны,
124 которая хранит состояние для разных значений ключа.
125 Состояние в частности хранит текущее число запросов.
126 Ключом является значение заданной переменной.
127 Пример использования:
128 <example>
129 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
130 </example>
131 </para>
132
133 <para>
134 В данном случае состояния хранятся в зоне “one” размером 10 мегабайт,
135 и средняя скорость запросов для этой зоны не может превышать
136 1 запроса в секунду.
137 </para>
138
139 <para>
140 В качестве ключа используется IP-адрес клиента.
141 Обратите внимание, что вместо переменной <var>$remote_addr</var> используется
142 переменная <var>$binary_remote_addr</var>, позволяющая уменьшить
143 размер состояния до 64 байт.
144 В зоне размером 1 мегабайт может разместиться около 16 тысяч состояний
145 размером 64 байта.
146 При переполнении зоны в ответ на последующие запросы сервер будет
147 возвращать ошибку
148 <http-status code="503" text="Service Temporarily Unavailable"/>.
149 </para>
150
151 <para>
152 Скорость задаётся в запросах в секунду (r/s).
153 Если же нужна скорость меньше одного запроса в секунду,
154 то она задаётся в запросах в минуту (r/m), например,
155 ползапроса в секунду — это 30r/m.
132 </para> 156 </para>
133 157
134 </directive> 158 </directive>
135 159
136 </section> 160 </section>