Mercurial > hg > nginx-site
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> |