Mercurial > hg > nginx-site
comparison xml/ru/docs/stream/ngx_stream_js_module.xml @ 1843:3492eb9b8138
Translated http and stream js modules into Russian.
author | Yaroslav Zhuravlev <yar@nginx.com> |
---|---|
date | Mon, 28 Nov 2016 21:29:02 +0300 |
parents | xml/en/docs/stream/ngx_stream_js_module.xml@15632fc2d548 |
children | f56626ce9c40 |
comparison
equal
deleted
inserted
replaced
1842:db848aaa123a | 1843:3492eb9b8138 |
---|---|
1 <?xml version="1.0"?> | |
2 | |
3 <!-- | |
4 Copyright (C) Nginx, Inc. | |
5 --> | |
6 | |
7 <!DOCTYPE module SYSTEM "../../../../dtd/module.dtd"> | |
8 | |
9 <module name="Модуль ngx_stream_js_module" | |
10 link="/ru/docs/stream/ngx_stream_js_module.html" | |
11 lang="ru" | |
12 rev="1"> | |
13 | |
14 <section id="summary"> | |
15 | |
16 <para> | |
17 Модуль <literal>ngx_stream_js_module</literal> позволяет задавать | |
18 обработчики на JavaScript. | |
19 </para> | |
20 | |
21 <para> | |
22 По умолчанию этот модуль не собирается, его необходимо собрать с | |
23 модулем nginx JavaScript с помощью конфигурационного параметра | |
24 <literal>--add_module</literal>: | |
25 <example> | |
26 ./configure --add-module=<value>path-to-njs</value>/nginx | |
27 </example> | |
28 <link url="http://hg.nginx.org/njs">Репозиторий</link> | |
29 модуля nginx JavaScript можно клонировать следующей командой | |
30 (необходим клиент <link url="https://www.mercurial-scm.org">Mercurial</link>): | |
31 <example> | |
32 hg clone http://hg.nginx.org/njs | |
33 </example> | |
34 Модуль также можно собрать как | |
35 <link doc="../ngx_core_module.xml" id="load_module">динамический</link>: | |
36 <example> | |
37 ./configure --add-dynamic_module=<value>path-to-njs</value>/nginx | |
38 </example> | |
39 </para> | |
40 | |
41 </section> | |
42 | |
43 | |
44 <section id="issues" name="Известные проблемы"> | |
45 | |
46 <para> | |
47 Модуль экспериментальный, поэтому возможно всё. | |
48 </para> | |
49 | |
50 </section> | |
51 | |
52 | |
53 <section id="example" name="Пример конфигурации"> | |
54 | |
55 <para> | |
56 <example> | |
57 stream { | |
58 js_include stream.js; | |
59 | |
60 server { | |
61 listen 12345; | |
62 | |
63 js_preread qux; | |
64 | |
65 js_set $foo foo; | |
66 js_set $bar bar; | |
67 | |
68 return foo; | |
69 } | |
70 | |
71 server { | |
72 listen 12346; | |
73 | |
74 js_access xyz; | |
75 proxy_pass 127.0.0.1:8000; | |
76 js_filter baz; | |
77 } | |
78 } | |
79 | |
80 http { | |
81 server { | |
82 listen 8000; | |
83 location / { | |
84 return 200 $http_foo\n; | |
85 } | |
86 } | |
87 } | |
88 </example> | |
89 </para> | |
90 | |
91 <para> | |
92 Файл <path>stream.js</path>: | |
93 <example> | |
94 var req = ''; | |
95 var matched = 0; | |
96 var line = ''; | |
97 | |
98 function qux(s) { | |
99 n = s.buffer.indexOf('\n'); | |
100 if (n == -1) { | |
101 return s.AGAIN; | |
102 } | |
103 | |
104 line = s.buffer.substr(0, n); | |
105 } | |
106 | |
107 function foo(s) { | |
108 return line; | |
109 } | |
110 | |
111 function bar(s) { | |
112 var v = s.variables; | |
113 s.log("hello from bar() handler!"); | |
114 return "foo-var" + v.remote_port + "; pid=" + v.pid; | |
115 } | |
116 | |
117 // Фильтр обрабатывает один буфер за вызов. | |
118 // Буфер недоступен в s.buffer для | |
119 // чтения и записи. Вызывается в обоих направлениях. | |
120 | |
121 function baz(s) { | |
122 if (s.fromUpstream || matched) { | |
123 return; | |
124 } | |
125 | |
126 // Отключение определённых адресов. | |
127 | |
128 if (s.remoteAddress.match('^192.*')) { | |
129 return s.ERROR; | |
130 } | |
131 | |
132 // Чтение строки HTTP-запроса. | |
133 // Получение байт в 'req' до того как | |
134 // будет прочитана строка запроса. Очистка текущего буфера | |
135 // для отключения вывода. | |
136 | |
137 req = req + s.buffer; | |
138 s.buffer = ''; | |
139 | |
140 n = req.search('\n'); | |
141 | |
142 if (n != -1) { | |
143 // Вставка нового HTTP-заголовка. | |
144 var rest = req.substr(n + 1); | |
145 req = req.substr(0, n + 1); | |
146 | |
147 addr = s.remoteAddress; | |
148 | |
149 s.log('req:' + req); | |
150 s.log('rest:' + rest); | |
151 | |
152 // Вывод результата и пропуск дальнейшей | |
153 // обработки. | |
154 | |
155 s.buffer = req + 'Foo: addr_' + addr + '\r\n' + rest; | |
156 matched = 1; | |
157 } | |
158 } | |
159 | |
160 function xyz(s) { | |
161 if (s.remoteAddress.match('^192.*')) { | |
162 return s.ABORT; | |
163 } | |
164 } | |
165 </example> | |
166 </para> | |
167 | |
168 </section> | |
169 | |
170 | |
171 <section id="directives" name="Директивы"> | |
172 | |
173 <directive name="js_access"> | |
174 <syntax><value>функция</value></syntax> | |
175 <default/> | |
176 <context>stream</context> | |
177 <context>server</context> | |
178 | |
179 <para> | |
180 Задаёт функцию JavaScript, которая будет вызываться в | |
181 <link doc="stream_processing.xml" id="access_phase">access</link>-фазе. | |
182 </para> | |
183 | |
184 </directive> | |
185 | |
186 | |
187 <directive name="js_filter"> | |
188 <syntax><value>функция</value></syntax> | |
189 <default/> | |
190 <context>stream</context> | |
191 <context>server</context> | |
192 | |
193 <para> | |
194 Задаёт фильтр данных. | |
195 </para> | |
196 | |
197 </directive> | |
198 | |
199 | |
200 <directive name="js_include"> | |
201 <syntax><value>файл</value></syntax> | |
202 <default/> | |
203 <context>stream</context> | |
204 <context>server</context> | |
205 | |
206 <para> | |
207 Задаёт файл, который позволяет | |
208 задавать обработчики server и переменных на JavaScript. | |
209 </para> | |
210 | |
211 </directive> | |
212 | |
213 | |
214 <directive name="js_preread"> | |
215 <syntax><value>функция</value></syntax> | |
216 <default/> | |
217 <context>stream</context> | |
218 <context>server</context> | |
219 | |
220 <para> | |
221 Задаёт функцию JavaScript, которая будет вызываться в | |
222 <link doc="stream_processing.xml" id="preread_phase">preread</link>-фазе. | |
223 </para> | |
224 | |
225 </directive> | |
226 | |
227 | |
228 <directive name="js_set"> | |
229 <syntax> | |
230 <value>$переменная</value> <value>функция</value></syntax> | |
231 <default/> | |
232 <context>stream</context> | |
233 <context>server</context> | |
234 | |
235 <para> | |
236 Задаёт функцию JavaScript для указанной переменной. | |
237 </para> | |
238 | |
239 </directive> | |
240 | |
241 </section> | |
242 | |
243 | |
244 <section id="properties" name="Свойства объекта сессии"> | |
245 <para> | |
246 Каждый stream-обработчик JavaScript получает один аргумент: | |
247 объект stream-сессии. | |
248 </para> | |
249 | |
250 <para> | |
251 Объект сессии имеет следующие свойства: | |
252 | |
253 <list type="tag"> | |
254 | |
255 <tag-name><literal>remoteAddress</literal></tag-name> | |
256 <tag-desc> | |
257 адрес клиента, только чтение | |
258 </tag-desc> | |
259 | |
260 <tag-name><literal>eof</literal></tag-name> | |
261 <tag-desc> | |
262 логическое свойство, | |
263 true, если текущий буфер является последним буфером, | |
264 только чтение | |
265 </tag-desc> | |
266 | |
267 <tag-name><literal>fromUpstream</literal></tag-name> | |
268 <tag-desc> | |
269 логическое свойство, | |
270 true, если текущий буфер является буфером от проксируемого сервера к клиенту, | |
271 только чтение | |
272 </tag-desc> | |
273 | |
274 <tag-name><literal>buffer</literal></tag-name> | |
275 <tag-desc> | |
276 текущий буфер, доступен для записи | |
277 </tag-desc> | |
278 | |
279 <tag-name><literal>variables{}</literal></tag-name> | |
280 <tag-desc> | |
281 объект переменных nginx, только чтение | |
282 </tag-desc> | |
283 | |
284 <tag-name><literal>OK</literal></tag-name> | |
285 <tag-desc> | |
286 код <literal>OK</literal> | |
287 </tag-desc> | |
288 | |
289 <tag-name><literal>DECLINED</literal></tag-name> | |
290 <tag-desc> | |
291 код <literal>DECLINED</literal> | |
292 </tag-desc> | |
293 | |
294 <tag-name><literal>AGAIN</literal></tag-name> | |
295 <tag-desc> | |
296 код <literal>AGAIN</literal> | |
297 </tag-desc> | |
298 | |
299 <tag-name><literal>ERROR</literal></tag-name> | |
300 <tag-desc> | |
301 код <literal>ERROR</literal> | |
302 </tag-desc> | |
303 | |
304 <tag-name><literal>ABORT</literal></tag-name> | |
305 <tag-desc> | |
306 код <literal>ABORT</literal> | |
307 </tag-desc> | |
308 </list> | |
309 </para> | |
310 | |
311 <para> | |
312 Объект сессии имеет следующие методы: | |
313 | |
314 <list type="tag"> | |
315 | |
316 <tag-name><literal>log(<value>строка</value>)</literal></tag-name> | |
317 <tag-desc> | |
318 записывает отправленную <value>строку</value> в лог-файл ошибок | |
319 </tag-desc> | |
320 </list> | |
321 </para> | |
322 | |
323 </section> | |
324 | |
325 </module> |