# HG changeset patch # User Yaroslav Zhuravlev # Date 1480357742 -10800 # Node ID 3492eb9b8138947858affbca83af907d25ee5145 # Parent db848aaa123a03990dadad7cb1f166593a1c89dd Translated http and stream js modules into Russian. diff -r db848aaa123a -r 3492eb9b8138 xml/ru/GNUmakefile --- a/xml/ru/GNUmakefile Fri Nov 25 13:40:23 2016 +0300 +++ b/xml/ru/GNUmakefile Mon Nov 28 21:29:02 2016 +0300 @@ -48,6 +48,7 @@ http/ngx_http_hls_module \ http/ngx_http_image_filter_module \ http/ngx_http_index_module \ + http/ngx_http_js_module \ http/ngx_http_limit_conn_module \ http/ngx_http_limit_req_module \ http/ngx_http_limit_zone_module \ @@ -88,6 +89,7 @@ stream/ngx_stream_core_module \ stream/ngx_stream_geo_module \ stream/ngx_stream_geoip_module \ + stream/ngx_stream_js_module \ stream/ngx_stream_limit_conn_module \ stream/ngx_stream_log_module \ stream/ngx_stream_map_module \ diff -r db848aaa123a -r 3492eb9b8138 xml/ru/docs/http/ngx_http_js_module.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/ru/docs/http/ngx_http_js_module.xml Mon Nov 28 21:29:02 2016 +0300 @@ -0,0 +1,280 @@ + + + + + + + + +
+ + +Модуль ngx_http_js_module позволяет задавать обработчики +location и переменных на JavaScript. + + + +По умолчанию этот модуль не собирается, его необходимо собрать с +модулем nginx JavaScript с помощью конфигурационного параметра +--add_module: + +./configure --add-module=path-to-njs/nginx + +Репозиторий +модуля nginx JavaScript можно клонировать следующей командой +(необходим клиент Mercurial): + +hg clone http://hg.nginx.org/njs + +Модуль также можно собрать как +динамический: + +./configure --add-dynamic_module=path-to-njs/nginx + + + +
+ + +
+ + +Модуль экспериментальный, поэтому возможно всё. + + +
+ + +
+ + + +js_include http.js; + +server { + listen 8000; + + location / { + js_set $foo foo; + add_header X-Foo $foo; + js_content baz; + } + + location /summary { + js_set $summary summary; + return 200 $summary; + } +} + + + + +Файл http.js: + +function foo(req, res) { + req.log("hello from foo() handler"); + return "foo"; +} + +function summary(req, res) { + var a, s, h; + + s = "JS summary\n\n"; + + s += "Method: " + req.method + "\n"; + s += "HTTP version: " + req.httpVersion + "\n"; + s += "Host: " + req.headers.host + "\n"; + s += "Remote Address: " + req.remoteAddress + "\n"; + s += "URI: " + req.uri + "\n"; + + s += "Headers:\n"; + for (h in req.headers) { + s += " header '" + h + "' is '" + req.headers[h] + "'\n"; + } + + s += "Args:\n"; + for (a in req.args) { + s += " arg '" + a + "' is '" + req.args[a] + "'\n"; + } + + return s; +} + +function baz(req, res) { + res.headers.foo = 1234; + res.status = 200; + res.contentType = "text/plain; charset=utf-8"; + res.contentLength = 15; + res.sendHeader(); + res.send("nginx"); + res.send("java"); + res.send("script"); + + res.finish(); +} + + + +
+ + +
+ + +файл + +http +server +location + + +Задаёт файл, позволяющий задавать обработчики location и переменных +на JavaScript. + + + + + + +функция + +location +limit_except + + +Задаёт функцию JavaScript в качестве обработчика содержимого location. + + + + + + + +$переменная функция + +http +server +location + + +Задаёт функцию JavaScript для указанной переменной. + + + + +
+ + +
+ +Каждый HTTP-обработчик JavaScript получает два аргумента: запрос и ответ. + + + +Объект запроса имеет следующие свойства: + + +uri + +текущий URI запроса, только чтение + + +method + +метод запроса, только чтение + + +httpVersion + +версия HTTP, только чтение + + +remoteAddress + +адрес клиента, только чтение + + +headers{} + +объект заголовков запроса, только чтение. + +Например, доступ к заголовку Header-Name +можно получить при помощи синтаксиса headers['Header-Name'] +или headers.Header_name + + + +args{} + +объект аргументов запроса, только чтение + + +variables{} + +объект переменных nginx, только чтение + + +log(строка) + +записывает строку в лог-файл ошибок + + + + + +Объект ответа имеет следующие свойства: + + +status + +статус ответа, доступно для записи + + +headers{} + +объект заголовков ответа + + +contentType + +значение поля
Content-Type
заголовка ответа, +доступно для записи +
+ +contentLength + +значение поля
Content-Length
заголовка ответа, +доступно для записи +
+
+
+ + +Объект ответа имеет следующие методы: + + +sendHeader() + +отправляет заголовок HTTP клиенту + + +send(строка) + +отправляет часть тела ответа клиенту + + +finish() + +завершает отправку ответа клиенту + + + + +
+ +
diff -r db848aaa123a -r 3492eb9b8138 xml/ru/docs/index.xml --- a/xml/ru/docs/index.xml Fri Nov 25 13:40:23 2016 +0300 +++ b/xml/ru/docs/index.xml Mon Nov 28 21:29:02 2016 +0300 @@ -8,7 +8,7 @@
@@ -307,6 +307,11 @@ + +ngx_http_js_module + + + ngx_http_limit_conn_module @@ -519,6 +524,11 @@ + +ngx_stream_js_module + + + ngx_stream_limit_conn_module diff -r db848aaa123a -r 3492eb9b8138 xml/ru/docs/stream/ngx_stream_js_module.xml --- /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 @@ + + + + + + + + +
+ + +Модуль ngx_stream_js_module позволяет задавать +обработчики на JavaScript. + + + +По умолчанию этот модуль не собирается, его необходимо собрать с +модулем nginx JavaScript с помощью конфигурационного параметра +--add_module: + +./configure --add-module=path-to-njs/nginx + +Репозиторий +модуля nginx JavaScript можно клонировать следующей командой +(необходим клиент Mercurial): + +hg clone http://hg.nginx.org/njs + +Модуль также можно собрать как +динамический: + +./configure --add-dynamic_module=path-to-njs/nginx + + + +
+ + +
+ + +Модуль экспериментальный, поэтому возможно всё. + + +
+ + +
+ + + +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; + } + } +} + + + + +Файл stream.js: + +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; + } +} + + + +
+ + +
+ + +функция + +stream +server + + +Задаёт функцию JavaScript, которая будет вызываться в +access-фазе. + + + + + + +функция + +stream +server + + +Задаёт фильтр данных. + + + + + + +файл + +stream +server + + +Задаёт файл, который позволяет +задавать обработчики server и переменных на JavaScript. + + + + + + +функция + +stream +server + + +Задаёт функцию JavaScript, которая будет вызываться в +preread-фазе. + + + + + + + +$переменная функция + +stream +server + + +Задаёт функцию JavaScript для указанной переменной. + + + + +
+ + +
+ +Каждый stream-обработчик JavaScript получает один аргумент: +объект stream-сессии. + + + +Объект сессии имеет следующие свойства: + + + +remoteAddress + +адрес клиента, только чтение + + +eof + +логическое свойство, +true, если текущий буфер является последним буфером, +только чтение + + +fromUpstream + +логическое свойство, +true, если текущий буфер является буфером от проксируемого сервера к клиенту, +только чтение + + +buffer + +текущий буфер, доступен для записи + + +variables{} + +объект переменных nginx, только чтение + + +OK + +код OK + + +DECLINED + +код DECLINED + + +AGAIN + +код AGAIN + + +ERROR + +код ERROR + + +ABORT + +код ABORT + + + + + +Объект сессии имеет следующие методы: + + + +log(строка) + +записывает отправленную строку в лог-файл ошибок + + + + +
+ +