njs scripting language

njs is a subset of the JavaScript language that allows extending nginx functionality. njs is created in compliance with ECMAScript 5.1 (strict mode) with some ECMAScript 6 and later extensions. The compliance is still evolving.

Use cases

  • Complex access control and security checks in njs before a request reaches an upstream server
  • Manipulating response headers
  • Writing flexible asynchronous content handlers and filters

See examples and blog posts for more njs use cases.

Basic HTTP Example

To use njs in nginx:

  • install njs scripting language

  • create an njs script file, for example, http.js. See Reference for the list of njs properties and methods.

    function hello(r) {
        r.return(200, "Hello world!");
    }
    
    export default {hello};
    

  • in the nginx.conf file, enable ngx_http_js_module module and specify the js_import directive with the http.js script file:

    load_module modules/ngx_http_js_module.so;
    
    events {}
    
    http {
        js_import http.js;
    
        server {
            listen 8000;
    
            location / {
                js_content http.hello;
            }
        }
    }
    

There is also a standalone command line utility that can be used independently of nginx for njs development and debugging.

Tested OS and platforms

  • FreeBSD / amd64;
  • Linux / x86, amd64, arm64, ppc64el;
  • Solaris 11 / amd64;
  • macOS / x86_64;

Presentation at nginx.conf 2018