diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/ru/docs/stream/ngx_stream_js_module.xml	Mon Nov 28 21:29:02 2016 +0300
@@ -0,0 +1,325 @@
+<?xml version="1.0"?>
+
+<!--
+  Copyright (C) Nginx, Inc.
+  -->
+
+<!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">
+
+<module name="Модуль ngx_stream_js_module"
+        link="/ru/docs/stream/ngx_stream_js_module.html"
+        lang="ru"
+        rev="1">
+
+<section id="summary">
+
+<para>
+Модуль <literal>ngx_stream_js_module</literal> позволяет задавать
+обработчики на JavaScript.
+</para>
+
+<para>
+По умолчанию этот модуль не собирается, его необходимо собрать с
+модулем nginx JavaScript с помощью конфигурационного параметра
+<literal>--add_module</literal>:
+<example>
+./configure --add-module=<value>path-to-njs</value>/nginx
+</example>
+<link url="http://hg.nginx.org/njs">Репозиторий</link>
+модуля nginx JavaScript можно клонировать следующей командой
+(необходим клиент <link url="https://www.mercurial-scm.org">Mercurial</link>):
+<example>
+hg clone http://hg.nginx.org/njs
+</example>
+Модуль также можно собрать как
+<link doc="../ngx_core_module.xml" id="load_module">динамический</link>:
+<example>
+./configure --add-dynamic_module=<value>path-to-njs</value>/nginx
+</example>
+</para>
+
+</section>
+
+
+<section id="issues" name="Известные проблемы">
+
+<para>
+Модуль экспериментальный, поэтому возможно всё.
+</para>
+
+</section>
+
+
+<section id="example" name="Пример конфигурации">
+
+<para>
+<example>
+stream {
+    js_include stream.js;
+
+    server {
+        listen 12345;
+
+        js_preread qux;
+
+        js_set $foo foo;
+        js_set $bar bar;
+
+        return foo;
+    }
+
+    server {
+        listen 12346;
+
+        js_access  xyz;
+        proxy_pass 127.0.0.1:8000;
+        js_filter  baz;
+    }
+}
+
+http {
+    server {
+        listen 8000;
+        location / {
+            return 200 $http_foo\n;
+        }
+    }
+}
+</example>
+</para>
+
+<para>
+Файл <path>stream.js</path>:
+<example>
+var req = '';
+var matched = 0;
+var line = '';
+
+function qux(s) {
+    n = s.buffer.indexOf('\n');
+    if (n == -1) {
+        return s.AGAIN;
+    }
+
+    line = s.buffer.substr(0, n);
+}
+
+function foo(s) {
+    return line;
+}
+
+function bar(s) {
+    var v = s.variables;
+    s.log("hello from bar() handler!");
+    return "foo-var" + v.remote_port + "; pid=" + v.pid;
+}
+
+// Фильтр обрабатывает один буфер за вызов.
+// Буфер недоступен в s.buffer для
+// чтения и записи.  Вызывается в обоих направлениях.
+
+function baz(s) {
+    if (s.fromUpstream || matched) {
+        return;
+    }
+
+    // Отключение определённых адресов.
+
+    if (s.remoteAddress.match('^192.*')) {
+        return s.ERROR;
+    }
+
+    // Чтение строки HTTP-запроса.
+    // Получение байт в 'req' до того как
+    // будет прочитана строка запроса.  Очистка текущего буфера
+    // для отключения вывода.
+
+    req = req + s.buffer;
+    s.buffer = '';
+
+    n = req.search('\n');
+
+    if (n != -1) {
+        // Вставка нового HTTP-заголовка.
+        var rest = req.substr(n + 1);
+        req = req.substr(0, n + 1);
+
+        addr = s.remoteAddress;
+
+        s.log('req:' + req);
+        s.log('rest:' + rest);
+
+        // Вывод результата и пропуск дальнейшей
+        // обработки.
+
+        s.buffer = req + 'Foo: addr_' + addr + '\r\n' + rest;
+        matched = 1;
+    }
+}
+
+function xyz(s) {
+    if (s.remoteAddress.match('^192.*')) {
+        return s.ABORT;
+    }
+}
+</example>
+</para>
+
+</section>
+
+
+<section id="directives" name="Директивы">
+
+<directive name="js_access">
+<syntax><value>функция</value></syntax>
+<default/>
+<context>stream</context>
+<context>server</context>
+
+<para>
+Задаёт функцию JavaScript, которая будет вызываться в
+<link doc="stream_processing.xml" id="access_phase">access</link>-фазе.
+</para>
+
+</directive>
+
+
+<directive name="js_filter">
+<syntax><value>функция</value></syntax>
+<default/>
+<context>stream</context>
+<context>server</context>
+
+<para>
+Задаёт фильтр данных.
+</para>
+
+</directive>
+
+
+<directive name="js_include">
+<syntax><value>файл</value></syntax>
+<default/>
+<context>stream</context>
+<context>server</context>
+
+<para>
+Задаёт файл, который позволяет
+задавать обработчики server и переменных на JavaScript.
+</para>
+
+</directive>
+
+
+<directive name="js_preread">
+<syntax><value>функция</value></syntax>
+<default/>
+<context>stream</context>
+<context>server</context>
+
+<para>
+Задаёт функцию JavaScript, которая будет вызываться в
+<link doc="stream_processing.xml" id="preread_phase">preread</link>-фазе.
+</para>
+
+</directive>
+
+
+<directive name="js_set">
+<syntax>
+<value>$переменная</value> <value>функция</value></syntax>
+<default/>
+<context>stream</context>
+<context>server</context>
+
+<para>
+Задаёт функцию JavaScript для указанной переменной.
+</para>
+
+</directive>
+
+</section>
+
+
+<section id="properties" name="Свойства объекта сессии">
+<para>
+Каждый stream-обработчик JavaScript получает один аргумент:
+объект stream-сессии.
+</para>
+
+<para>
+Объект сессии имеет следующие свойства:
+
+<list type="tag">
+
+<tag-name><literal>remoteAddress</literal></tag-name>
+<tag-desc>
+адрес клиента, только чтение
+</tag-desc>
+
+<tag-name><literal>eof</literal></tag-name>
+<tag-desc>
+логическое свойство,
+true, если текущий буфер является последним буфером,
+только чтение
+</tag-desc>
+
+<tag-name><literal>fromUpstream</literal></tag-name>
+<tag-desc>
+логическое свойство,
+true, если текущий буфер является буфером от проксируемого сервера к клиенту,
+только чтение
+</tag-desc>
+
+<tag-name><literal>buffer</literal></tag-name>
+<tag-desc>
+текущий буфер, доступен для записи
+</tag-desc>
+
+<tag-name><literal>variables{}</literal></tag-name>
+<tag-desc>
+объект переменных nginx, только чтение
+</tag-desc>
+
+<tag-name><literal>OK</literal></tag-name>
+<tag-desc>
+код <literal>OK</literal>
+</tag-desc>
+
+<tag-name><literal>DECLINED</literal></tag-name>
+<tag-desc>
+код <literal>DECLINED</literal>
+</tag-desc>
+
+<tag-name><literal>AGAIN</literal></tag-name>
+<tag-desc>
+код <literal>AGAIN</literal>
+</tag-desc>
+
+<tag-name><literal>ERROR</literal></tag-name>
+<tag-desc>
+код <literal>ERROR</literal>
+</tag-desc>
+
+<tag-name><literal>ABORT</literal></tag-name>
+<tag-desc>
+код <literal>ABORT</literal>
+</tag-desc>
+</list>
+</para>
+
+<para>
+Объект сессии имеет следующие методы:
+
+<list type="tag">
+
+<tag-name><literal>log(<value>строка</value>)</literal></tag-name>
+<tag-desc>
+записывает отправленную <value>строку</value> в лог-файл ошибок
+</tag-desc>
+</list>
+</para>
+
+</section>
+
+</module>