From b81c38b550b129dac35373a544733bb5ae27e959 Mon Sep 17 00:00:00 2001 From: Michael Vernik Date: Thu, 30 May 2024 23:24:30 -0700 Subject: [PATCH] Updated README New Readme content and added .md extension --- NGINX-js-1660x332.png | Bin 0 -> 80798 bytes README | 27 ---- README.md | 365 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 365 insertions(+), 27 deletions(-) create mode 100644 NGINX-js-1660x332.png delete mode 100644 README create mode 100644 README.md diff --git a/NGINX-js-1660x332.png b/NGINX-js-1660x332.png new file mode 100644 index 0000000000000000000000000000000000000000..cd73e270da6b85a264a2207ec90c8a65e61321d9 GIT binary patch literal 80798 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

iGA~L{-jG4XZ`hqC*Nxf*H?|ljds6{ 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 Ro=PbA($O;1#Gkz$^nbIX?#BQC literal 0 HcmV?d00001 diff --git a/README b/README deleted file mode 100644 index 57de202ce..000000000 --- a/README +++ /dev/null @@ -1,27 +0,0 @@ - -NGINX JavaScript (njs) ----------------------- - -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. - -The documentation is available online: - - https://nginx.org/en/docs/njs/ - -Additional examples and howtos can be found here: - - https://github.com/nginx/njs-examples - -Please ask questions, report issues, and send patches to the mailing list: - - nginx-devel@nginx.org (https://mailman.nginx.org/mailman/listinfo/nginx-devel) - -or via Github: - - https://github.com/nginx/njs - --- -NGINX, Inc., https://nginx.com - diff --git a/README.md b/README.md new file mode 100644 index 000000000..bca96454c --- /dev/null +++ b/README.md @@ -0,0 +1,365 @@ +![NGINX JavaScript Banner](NGINX-js-1660x332.png "NGINX JavaScript Banner") + +# NGINX JavaScript +NGINX JavaScript, also known as [NJS](https://nginx.org/en/docs/njs/), is a dynamic module for [NGINX](https://nginx.org/en/download.html) that enables the extension of built-in functionality using familiar JavaScript syntax. The NJS language is a subset of JavaScript, compliant with [ES5](https://262.ecma-international.org/5.1/) (ECMAScript 5.1 [Strict Variant](https://262.ecma-international.org/5.1/#sec-4.2.2)) with some [ES6](https://262.ecma-international.org/6.0/) (ECMAScript 6) and newer extensions. See [compatibility](https://nginx.org/en/docs/njs/compatibility.html) for more details. + +# Table of Contents +- [How it works](#how-it-works) +- [Downloading and installing](#downloading-and-installing) + - [Provisioning the NGINX package repository](#provisioning-the-nginx-package-repository) + - [Installing the NGINX JavaScript modules](#installing-the-nginx-javascipt-modules) + - [Installed files and locations](#installed-files-and-locations) +- [Getting started with NGINX JavaScript](#getting-started-with-nginx-javascript) + - [Verify NGINX is running](#verify-nginx-is-running) + - [Enabling the NGINX JavaScript modules](#enabling-the-nginx-javascipt-modules) + - [Basics of writing .js script files](#basics-of-writing-js-script-files) + - [Reference of custom objects, methods, and properties](#reference-of-custom-objects-methods-and-properties) + - [Example: Hello World](#hello-world) + - [The NJS command line interface (CLI)](#the-njs-command-line-interface-cli) +- [Building from source](#building-from-source) + - [Installing dependencies](#installing-dependencies) + - [Cloning the NGINX JavaScript GitHub repository](#cloning-the-nginx-javascript-github-repository) + - [Building standalone command line interface utility (optional)](#building-standalone-command-line-interface-utility-optional) + - [Cloning the NGINX GitHub repository](#cloning-the-nginx-github-repository) + - [Building NGINX JavaScript as a module of NGINX](#building-nginx-javascript-as-a-module-of-nginx) +- [NGINX JavaScript technical specifications](#nginx-javascript-technical-specifications) + - [Supported distributions](#supported-distributions) + - [Supported deployment environments](#supported-deployment-environments) + - [Supported NGINX versions](#supported-nginx-versions) + - [Sizing recommendations](#sizing-recommendations) +- [Asking questions, reporting issues, and contributing](#asking-questions-reporting-issues-and-contributing) +- [Change log](#change-log) +- [License](#license) + +# How it works +[NGINX JavaScript](https://nginx.org/en/docs/njs/) is provided as two [dynamic modules](https://nginx.org/en/linux_packages.html#dynmodules) for NGINX ([ngx_http_js_module](https://nginx.org/en/docs/http/ngx_http_js_module.html) and [ngx_stream_js_module](https://nginx.org/en/docs/stream/ngx_stream_js_module.html)) and can be added to any supported [NGINX Open Source](https://nginx.org/en/download.html) or [NGINX Plus](https://www.f5.com/products/nginx/nginx-plus) installation without recompilation. + +The NJS module allows NGINX administrators to: +- Add complex access control and security checks before requests reach upstream servers +- Manipulate response headers +- Write flexible, asynchronous content handlers, filters, and more! + +See [examples](https://github.com/nginx/njs-examples/) and our various projects developed with NJS: + +#### https://github.com/nginxinc/nginx-openid-connect +Extends NGINX Plus functionality to communicate directly with OIDC-compatible Identity Providers, authenticating users and authorizing content delivered by NGINX Plus. + +#### https://github.com/nginxinc/nginx-saml +Reference implementation of NGINX Plus as a service provider for SAML authentication. + +#### https://github.com/nginxinc/njs-prometheus-module +Exposes Prometheus metrics endpoint directly from NGINX Plus. + +> [!TIP] +> NJS can also be used with the [NGINX Unit](https://unit.nginx.org/) application server. Learn more about NGINX Unit's [Control API](https://unit.nginx.org/controlapi/) and how to [define function calls with NJS](https://unit.nginx.org/scripting/). + +# Downloading and installing +Follow these steps to download and install precompiled NGINX and NGINX JavaScript Linux binaries. You may also choose to [build the module locally from source code](#building-from-source). + +## Provisioning the NGINX package repository +Follow [this guide](https://nginx.org/en/linux_packages.html) to add the official NGINX package repository to your system and install NGINX Open Source. If you already have NGINX Open Source or NGINX Plus installed, skip the NGINX installation portion in the last step. + +## Installing the NGINX JavaScript modules +Once the repository has been provisioned, you may install NJS by issuing the following command: + +### Ubuntu or Debian based systems +```bash +sudo apt install nginx-module-njs +``` + +### RHEL, RedHat and its derivatives +```bash +sudo yum install nginx-module-njs +``` + +### Alpine or similar systems +```bash +sudo apk add nginx-module-njs@nginx +``` + +### SuSE, SLES or similar systems +```bash +sudo zypper install nginx-module-njs +``` + +> [!TIP] +> The package repository includes an alternate module that enables debug symbols. Although not recommended for production environments, this module may be helpful when developing NJS-based configurations. To download and install the debug version of the module, replace the module name in the previous command with `nginx-module-njs-dbg`. + +## Installed files and locations +The package installation scripts install two modules, supporting NGINX [`http`](https://nginx.org/en/docs/http/ngx_http_core_module.html#http) and [`stream`](https://nginx.org/en/docs/stream/ngx_stream_core_module.html#stream) contexts. + +- [ngx_http_js_module](https://nginx.org/en/docs/http/ngx_http_js_module.html) + + This NJS module enables manipulation of data transmitted over HTTP. +- [ngx_stream_js_module](https://nginx.org/en/docs/stream/ngx_stream_js_module.html) + + This NJS module enables manipulation of data transmitted via stream protocols such as TCP and UDP. + +By default, both modules are installed into the `/etc/nginx/modules` directory. + +# Getting started with NGINX JavaScript +Usage of NJS involves enabling the module, adding JavaScript files with defined functions, and invoking exported functions in NGINX configuration files. + +## Verify NGINX is running +NGINX JavaScript is a module for NGINX Open Source or NGINX Plus. If you haven't done so already, follow these steps to install [NGINX Open Source](https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/) or [NGINX Plus](https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-plus/). Once installed, ensure the NGINX instance is running and able to respond to HTTP requests. + +### Starting NGINX +Issue the following command to start NGINX: + +```bash +sudo nginx +``` + +### Verify NGINX is responding to HTTP requests +```bash +curl -I 127.0.0.1 +``` + +You should see the following response: +```bash +HTTP/1.1 200 OK +Server: nginx/1.25.5 +``` + +## Enabling the NGINX JavaScript modules +Once installed, either (or both) NJS module(s) must be included in the NGINX configuration file. On most systems, the NGINX configuration file is located at `/etc/nginx/nginx.conf` by default. + +### Edit the NGINX configuration file + +```bash +sudo vi /etc/nginx/nginx.conf +``` + +### Enable dynamic loading of NJS modules +Use the [load_module](https://nginx.org/en/docs/ngx_core_module.html#load_module) directive in the top-level (“main”) context to enable either (or both) module(s). + +```nginx +load_module modules/ngx_http_js_module.so; +load_module modules/ngx_stream_js_module.so; +``` + +## Basics of writing .js script files +NJS script files are typically named with a .js extension and placed in the `/etc/nginx/njs/` directory. They are usually comprised of functions that are then exported, making them available in NGINX configuration files. + +## Reference of custom objects, methods, and properties +NJS provides a collection of objects with associated methods and properties that are not part of ECMAScript definitions. See the [complete reference](https://nginx.org/en/docs/njs/reference.html) to these objects and how they can be used to further extend and customize NGINX. + +## Example: Hello World +Here's a basic "Hello World" example. + +### example.js +The `hello` function in this file returns an HTTP 200 OK status response code along with the string "Hello World!", followed by a line feed. The function is then exported for use in an NGINX configuration file. + +Add this file to the `/etc/nginx/njs` directory: + +```JavaScript +function hello(r) { + r.return(200, "Hello world!\n"); +} + +export default {hello} +``` + +### nginx.conf +We modify our NGINX configuration (`/etc/nginx/nginx.conf`) to import the JavaScript file and execute the function under specific circumstances. + +```nginx +# Load the ngx_http_js_module module +load_module modules/ngx_http_js_module.so; + +events {} + +http { + # Set the path to our njs JavaScript files + js_path "/etc/nginx/njs/"; + + # Import our JavaScript file into the variable "main" + js_import main from http/hello.js; + + server { + listen 80; + + location / { + # Execute the "hello" function defined in our JavaScript file on all HTTP requests + # and respond with the contents of our function. + js_content main.hello; + } + } +} +``` + +For a full list of njs directives, see the [ngx_http_js_module](https://nginx.org/en/docs/http/ngx_http_js_module.html) and [ngx_stream_js_module](https://nginx.org/en/docs/stream/ngx_stream_js_module.html) module documentation pages. + +> [!TIP] +> A more detailed version of this and other examples can be found in the official [njs-examples repository](https://github.com/nginx/njs-examples/tree/master). + +## The NJS command line interface (CLI) +NGINX JavaScript installs with a command line interface utility. The interface can be opened as an interactive shell or used to process JavaScript syntax from predefined files or standard input. Since the utility runs independently, NGINX-specific objects such as [HTTP](https://nginx.org/en/docs/njs/reference.html#http) and [Stream](https://nginx.org/en/docs/njs/reference.html#http) are not available within its runtime. + +### Example usage of the interactive CLI +```JavaScript +$ njs +>> globalThis +global { + njs: njs { + version: '0.8.4' + }, + global: [Circular], + process: process { + argv: ['/usr/bin/njs'], + env: { + PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', + HOSTNAME: 'f777c149d4f8', + TERM: 'xterm', + NGINX_VERSION: '1.25.5', + NJS_VERSION: '0.8.4', + PKG_RELEASE: '1~buster', + HOME: '/root' + } + }, + console: { + log: [Function: native], + dump: [Function: native], + time: [Function: native], + timeEnd: [Function: native] + }, + print: [Function: native] +} +>> +``` + +### Example usage of the non-interactive CLI +```bash +$ echo "2**3" | njs -q +8 +``` + +# Building from source +The following steps can be used to build NGINX JavaScript as a dynamic module to be integrated into NGINX or a standalone binary for use as a command line interface utility. + +> [!IMPORTANT] +> To build the module for use with NGINX, you will also need to clone, configure and build NGINX by following the steps outlined in this document. + +## Installing dependencies +Most Linux distributions will require several dependencies to be installed in order to build NGINX and NGINX JavaScript. The following instructions are specific to the `apt` package manager, widely available on most Ubuntu/Debian distributions and their derivatives. + +### Installing compiler and make utility + +```bash +sudo apt install gcc make +``` + +### Installing dependency libraries + +```bash +sudo apt install libpcre3-dev zlib1g-dev libssl-dev libxml2-dev libxslt-dev +``` + +> [!WARNING] +> This is the minimal set of dependency libraries needed to build NGINX and NJS. Other dependencies may be required if you choose to build NGINX with additional modules. Monitor the output of the `configure` command discussed in the following sections for information on which modules may be missing. + +## Cloning the NGINX JavaScript GitHub repository +Using your preferred method, clone the NGINX JavaScript repository into your development directory. See [Cloning a GitHub Repository](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) for additional help. + +```bash +https://github.com/nginx/njs.git +``` + +## Building the standalone command line interface utility (Optional) +The following steps are optional and only needed if you choose to build NJS as a standalone utility. + +### Install dependencies +To use the NJS interactive shell, you will need to install the libedit-dev library + +```bash +sudo apt install libedit-dev +``` + +### Configure and build +Run the following commands from the root directory of your cloned repository: + +```bash +./configure +``` + +Build NGINX JavaScript: +```bash +make +``` + +The utility should now be available at `/build/njs`. See [The NJS Command Line Interface (CLI)](#the-njs-command-line-interface-cli) for information on usage. + +## Cloning the NGINX GitHub repository +Clone the NGINX source code repository in a directory outside of the previously cloned NJS source repository. + +```bash +https://github.com/nginx/nginx.git +``` + +## Building NGINX JavaScript as a module of NGINX +To build NGINX JavaScript as a dynamic module, execute the following commands from the NGINX source code repository's root directory: + +```bash +auto/configure --add-dynamic-module=/nginx +``` + +> [!WARNING] +> By default, this method will only build the `ngx_http_js_module` module. To use NJS with the NGINX Stream module, you'll need to enable it during the `configure` step so it builds with the NGINX binary. Doing so will automatically compile the `ngx_stream_js_module` module when NJS is added to the build. One way of accomplishing this is to alter the `configure` step to: +> ```bash +> auto/configure --with-stream --add-dynamic-module=/nginx +> ``` + +Compile the module +```bash +make +``` + +> [!TIP] +> To build NGINX with NGINX JavaScript embedded into a single binary, alter the `configure` step to the following: +> ```bash +> auto/configure --add-module=/nginx +> ``` + +### Install module +If built as a dynamic module(s), the NGINX JavaScript module(s) will be available in the `/objs/` directory. The module(s) can then be copied to an existing NGINX installation and enabled. See [Enabling the NGINX JavaScript Modules](#enabling-the-nginx-javascipt-modules) for details. + +### Install compiled NGINX and NGINX JavaScript binaries +Alternatively, you may choose to install the built NGINX and NGINX JavaScript binaries by issuing the following command: + +> [!IMPORTANT] +> If built into the NGINX binary as a standard (not dynamic) module, this will be the easiest method of installation + +```bash +make install +``` + +By default, the NGINX binary will be installed into `/usr/local/nginx/sbin/nginx`. The NGINX JavaScript module(s) will be copied to `/usr/local/nginx/modules/`. + +# NGINX JavaScript technical specifications +Technical specifications for NJS are identical to those of NGINX. + +## Supported distributions +See [Tested Operating Systems and Platforms](https://nginx.org/en/#tested_os_and_platforms) for a complete list of supported distributions. + +## Supported deployment environments +- Container +- Public cloud (AWS, Google Cloud Platform, Microsoft Azure) +- Virtual machine + +## Supported NGINX versions +NGINX JavaScript is supported by all NGINX Open Source versions starting with nginx-1.14 and all NGINX Plus versions starting with NGINX Plus R15. + +# Asking questions, reporting issues, and contributing +We encourage you to engage with us. Please see the [Contributing](CONTRIBUTING.md) guide for information on how to ask questions, report issues and contribute code. + +# Change log +See our [release page](https://nginx.org/en/docs/njs/changes.html) to keep track of updates. + +# License +[2-clause BSD-like license](LICENSE) + +--- +Additional documentation available at: https://nginx.org/en/docs/njs/ + +©2024 F5, Inc. All rights reserved. +https://www.f5.com/products/nginx