Module ngx_stream_js_module

Example Configuration
Directives
js_access
js_filter
js_include
js_preread
js_set
Session Object Properties

The ngx_stream_js_module module is used to implement handlers in njs — a subset of the JavaScript language.

This module is not built by default. Download and install instructions are available here .

Example Configuration

This example is valid for njs 0.2.4 . For njs 0.2.3 and earlier, use this example.

                    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;
                    }
                    }
                    }
                    

The stream.js file:

                    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;
                    }
                    // Read HTTP request line.
                    // Collect bytes in 'req' until
                    // request line is read.
                    // Injects HTTP header into a client's request
                    var my_header =  'Foo: foo';
                    function header_inject(s) {
                    var req = '';
                    s.on('upload', function(data, flags) {
                    req += data;
                    var n = req.search('\n');
                    if (n != -1) {
                    var rest = req.substr(n + 1);
                    req = req.substr(0, n + 1);
                    s.send(req + my_header + '\r\n' + rest, flags);
                    s.off('upload');
                    }
                    });
                    }
                    function access(s) {
                    if (s.remoteAddress.match('^192.*')) {
                    s.abort();
                    return;
                    }
                    s.allow();
                    }
                    

Directives

Syntax: js_access function ;
Default:
Context: stream , server

Sets an njs function which will be called at the access phase.

Syntax: js_filter function ;
Default:
Context: stream , server

Sets a data filter.

Syntax: js_include file ;
Default:
Context: stream

Specifies a file that implements server and variable handlers in njs.

Syntax: js_preread function ;
Default:
Context: stream , server

Sets an njs function which will be called at the preread phase.

Syntax: js_set $variable function ;
Default:
Context: stream

Sets an njs function for the specified variable.

Session Object Properties

Each stream njs handler receives one argument, a stream session object .