Модуль ngx_stream_js_module

Пример конфигурации
Директивы
     js_access
     js_filter
     js_include
     js_preread
     js_set
Свойства объекта сессии

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

По умолчанию этот модуль не собирается. Инструкция по сборке и установке доступны здесь.

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

Данный пример необходимо использовать с версией njs 0.2.4. Для версий njs 0.2.3 и ранее необходимо использовать этот пример.

load_module modules/ngx_stream_js_module.so;
...

stream {
    js_include stream.js;

    js_set $bar bar;
    js_set $req_line req_line;

    server {
        listen 12345;

        js_preread preread;
        return     $req_line;
    }

    server {
        listen 12346;

        js_access  access;
        proxy_pass 127.0.0.1:8000;
        js_filter  header_inject;
    }
}

http {
    server {
        listen 8000;
        location / {
            return 200 $http_foo\n;
        }
    }
}

Файл stream.js:

var line = '';

function bar(s) {
    var v = s.variables;
    s.log("hello from bar() handler!");
    return "bar-var" + v.remote_port + "; pid=" + v.pid;
}

function preread(s) {
    s.on('upload', function (data, flags) {
        var n = data.indexOf('\n');
        if (n != -1) {
            line = data.substr(0, n);
            s.done();
        }
    });
}

function req_line(s) {
    return line;
}

// Чтение строки HTTP-запроса.
// Получение байт в 'req' до того как
// будет прочитана строка запроса.
// Добавление HTTP-заголовка в запрос клиента

function access(s) {
    if (s.remoteAddress.match('^192.*')) {
        s.abort();
        return;
    }

    s.allow();
}

Директивы

Синтаксис: js_access функция;
Умолчание:
Контекст: stream, server

Задаёт функцию njs, которая будет вызываться в access-фазе.

Синтаксис: js_filter функция;
Умолчание:
Контекст: stream, server

Задаёт фильтр данных.

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

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

Синтаксис: js_preread функция;
Умолчание:
Контекст: stream, server

Задаёт функцию njs, которая будет вызываться в preread-фазе.

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

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

Свойства объекта сессии

Каждый stream-обработчик njs получает один аргумент, объект stream-сессии.