Модуль ngx_http_js_module

Пример конфигурации
Директивы
     js_include
     js_content
     js_set
Аргументы запроса и ответа

Модуль ngx_http_js_module позволяет задавать обработчики location и переменных на nginScript — подмножестве языка JavaScript.

По умолчанию этот модуль не собирается, его необходимо собрать с модулем nginScript с помощью конфигурационного параметра --add_module:

./configure --add-module=path-to-njs/nginx

Репозиторий модуля nginScript можно клонировать следующей командой (необходим клиент Mercurial):

hg clone http://hg.nginx.org/njs

Модуль также можно собрать как динамический:

./configure --add-dynamic_module=path-to-njs/nginx

Пример конфигурации

js_include http.js;

js_set $foo     foo;
js_set $summary summary;

server {
    listen 8000;

    location / {
        add_header X-Foo $foo;
        js_content baz;
    }

    location /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();
}

Директивы

Синтаксис: js_include файл;
Умолчание:
Контекст: http

Задаёт файл, позволяющий задавать обработчики location и переменных на nginScript.

Синтаксис: js_content функция;
Умолчание:
Контекст: location, limit_except

Задаёт функцию nginScript в качестве обработчика содержимого location.

Синтаксис: js_set $переменная функция;
Умолчание:
Контекст: http

Задаёт функцию nginScript для указанной переменной.

Аргументы запроса и ответа

Каждый HTTP-обработчик nginScript получает два аргумента: запрос и ответ.

Объект запроса имеет следующие свойства:

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()
завершает отправку ответа клиенту