NJS とも呼ばれる NGINX JavaScript は、使い慣れた JavaScript 構文を使用して組み込み機能の拡張を可能にする NGINX の動的モジュールです。 NJS 言語は JavaScript のサブセットで、ES5 (ECMAScript 5.1 Strict Variant) に準拠し、一部の ES6 (ECMAScript 6) およびそれ以降の拡張機能を備えています。詳細については、互換性を参照してください。
NGINX JavaScript は、NGINX の 2 つの動的モジュール (ngx_http_js_module および ngx_stream_js_module) として提供されており、再コンパイルすることなく、サポートされている NGINX オープン ソースまたは NGINX Plus インストールに追加できます。
NJS モジュールを使用すると、NGINX 管理者は次のことが可能になります。
NJS で開発された例とさまざまなプロジェクトをご覧ください。
NGINX Plus の機能を拡張して、OIDC 互換のアイデンティティ プロバイダーと直接通信し、ユーザーを認証し、NGINX Plus によって配信されるコンテンツを承認します。
SAML 認証のサービス プロバイダーとしての NGINX Plus のリファレンス実装。
Prometheus メトリクス エンドポイントを NGINX Plus から直接公開します。
ヒント
NJS は NGINX Unit アプリケーション サーバーでも使用できます。 NGINX ユニットの制御 API と NJS で関数呼び出しを定義する方法について詳しく学習してください。
次の手順に従って、プリコンパイルされた NGINX および NGINX JavaScript Linux バイナリをダウンロードしてインストールします。ソース コードからモジュールをローカルにビルドすることも選択できます。
このガイドに従って、公式 NGINX パッケージ リポジトリをシステムに追加し、NGINX オープン ソースをインストールします。 NGINX Open Source または NGINX Plus がすでにインストールされている場合は、最後のステップの NGINX インストール部分をスキップしてください。
リポジトリがプロビジョニングされたら、次のコマンドを発行して NJS をインストールできます。
sudo apt install nginx-module-njs
sudo yum install nginx-module-njs
sudo apk add nginx-module-njs@nginx
sudo zypper install nginx-module-njs
ヒント
パッケージ リポジトリには、デバッグ シンボルを有効にする代替モジュールが含まれています。運用環境には推奨されませんが、このモジュールは NJS ベースの構成を開発する場合に役立つ場合があります。モジュールのデバッグ バージョンをダウンロードしてインストールするには、前のコマンドのモジュール名をnginx-module-njs-dbg
に置き換えます。
パッケージ インストール スクリプトは、NGINX http
およびstream
コンテキストをサポートする 2 つのモジュールをインストールします。
ngx_http_js_module
この NJS モジュールにより、HTTP 経由で送信されるデータの操作が可能になります。
ngx_stream_js_module
この NJS モジュールにより、TCP や UDP などのストリーム プロトコルを介して送信されるデータの操作が可能になります。
デフォルトでは、両方のモジュールが/etc/nginx/modules
ディレクトリにインストールされます。
NJS の使用には、モジュールの有効化、定義された関数を含む JavaScript ファイルの追加、NGINX 構成ファイル内のエクスポートされた関数の呼び出しが含まれます。
NGINX JavaScript は、NGINX オープンソースまたは NGINX Plus のモジュールです。まだインストールしていない場合は、次の手順に従って NGINX オープンソースまたは NGINX Plus をインストールします。インストールしたら、NGINX インスタンスが実行中であり、HTTP リクエストに応答できることを確認します。
次のコマンドを発行して NGINX を起動します。
sudo nginx
curl -I 127.0.0.1
次の応答が表示されるはずです。
HTTP/1.1 200 OK
Server: nginx/1.25.5
インストールしたら、NGINX モジュールのいずれか (または両方) を NGINX 構成ファイルに含める必要があります。ほとんどのシステムでは、NGINX 構成ファイルはデフォルトで/etc/nginx/nginx.conf
にあります。
sudo vi /etc/nginx/nginx.conf
いずれか(または両方)のモジュールを有効にするには、トップレベル(「メイン」)コンテキストでload_moduleディレクティブを使用します。
load_module modules/ngx_http_js_module.so;
load_module modules/ngx_stream_js_module.so;
NJS スクリプト ファイルは通常、.js 拡張子が付いた名前が付けられ、 /etc/nginx/njs/
ディレクトリに配置されます。これらは通常、エクスポートされる関数で構成されており、NGINX 構成ファイルで使用できるようになります。
NJS は、ECMAScript 定義の一部ではない関連メソッドとプロパティを備えたオブジェクトのコレクションを提供します。これらのオブジェクトの完全なリファレンスと、それらを使用して NGINX をさらに拡張およびカスタマイズする方法をご覧ください。
基本的な「Hello World」の例を次に示します。
このファイルのhello
関数は、改行が続く文字列「Hello World!」とともに HTTP 200 OK ステータス応答コードを返します。その後、関数は NGINX 構成ファイルで使用するためにエクスポートされます。
このファイルを/etc/nginx/njs
ディレクトリに追加します。
function hello ( r ) {
r . return ( 200 , "Hello world!n" ) ;
}
export default { hello }
NGINX 設定 ( /etc/nginx/nginx.conf
) を変更して、JavaScript ファイルをインポートし、特定の状況で関数を実行します。
# 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;
}
}
}
njs ディレクティブの完全なリストについては、ngx_http_js_module および ngx_stream_js_module モジュールのドキュメント ページを参照してください。
ヒント
この例と他の例のより詳細なバージョンは、公式の njs-examples リポジトリにあります。
NGINX JavaScript は、コマンド ライン インターフェイス ユーティリティを使用してインストールされます。このインターフェイスは、対話型シェルとして開くことも、事前定義されたファイルまたは標準入力から JavaScript 構文を処理するために使用することもできます。このユーティリティは独立して実行されるため、HTTP や Stream などの NGINX 固有のオブジェクトはそのランタイム内では使用できません。
$ 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 ]
}
>>
$ echo " 2**3 " | njs -q
8
次の手順を使用して、NGINX に統合される動的モジュールとして NGINX JavaScript を構築したり、コマンド ライン インターフェイス ユーティリティとして使用するスタンドアロン バイナリを構築したりできます。
重要
NGINX で使用するモジュールを構築するには、このドキュメントで概説されている手順に従って、NGINX のクローンを作成し、構成し、構築する必要もあります。
ほとんどの Linux ディストリビューションでは、NGINX および NGINX JavaScript を構築するために、いくつかの依存関係をインストールする必要があります。次の手順は、ほとんどの Ubuntu/Debian ディストリビューションとその派生製品で広く利用できるapt
パッケージ マネージャーに固有の手順です。
sudo apt install gcc make
sudo apt install libpcre3-dev zlib1g-dev libssl-dev libxml2-dev libxslt-dev
QuickJS を使用してビルドするには、QuickJS ライブラリもビルドする必要があります。
git clone https://github.com/bellard/quickjs
cd quickjs
CFLAGS= ' -fPIC ' make libquickjs.a
警告
これは、NGINX および NJS を構築するために必要な依存関係ライブラリの最小限のセットです。追加モジュールを使用して NGINX を構築することを選択した場合は、他の依存関係が必要になる場合があります。どのモジュールが不足しているかについては、次のセクションで説明するconfigure
コマンドの出力を監視してください。
好みの方法を使用して、NGINX JavaScript リポジトリのクローンを開発ディレクトリに作成します。詳細については、「GitHub リポジトリのクローン作成」を参照してください。
https://github.com/nginx/njs.git
次の手順はオプションであり、NJS をスタンドアロン ユーティリティとして構築することを選択した場合にのみ必要です。
NJS 対話型シェルを使用するには、libedit-dev ライブラリをインストールする必要があります。
sudo apt install libedit-dev
クローン作成したリポジトリのルート ディレクトリから次のコマンドを実行します。
./configure
NGINX JavaScript をビルドします。
make
このユーティリティは、
で利用できるようになります。使用方法については、「NJS コマンド ライン インターフェイス (CLI)」を参照してください。
以前に複製した NJS ソース リポジトリの外部のディレクトリに NGINX ソース コード リポジトリの複製を作成します。
https://github.com/nginx/nginx.git
NGINX JavaScript を動的モジュールとして構築するには、NGINX ソース コード リポジトリのルート ディレクトリから次のコマンドを実行します。
auto/configure --add-dynamic-module= < NJS_SRC_ROOT_DIR > /nginx
QuickJS サポートを使用してビルドするには、 --with-cc-opt=
および--with-ld-opt=
オプションを使用してインクルードとライブラリのパスを指定します。
auto/configure --add-dynamic-module= < NJS_SRC_ROOT_DIR > /nginx --with-cc-opt= " -I" --with-ld-opt= " -L"
警告
デフォルトでは、このメソッドはngx_http_js_module
モジュールのみをビルドします。 NGINX Stream モジュールで NJS を使用するには、NGINX バイナリでビルドされるように、 configure
ステップで NJS を有効にする必要があります。そうすることで、NJS がビルドに追加されるときにngx_stream_js_module
モジュールが自動的にコンパイルされます。これを実現する 1 つの方法は、 configure
ステップを次のように変更することです。
auto/configure --with-stream --add-dynamic-module= < NJS_SRC_ROOT_DIR > /nginx
モジュールをコンパイルする
make
ヒント
NGINX JavaScript が 1 つのバイナリに埋め込まれた NGINX をビルドするには、 configure
ステップを次のように変更します。
auto/configure --add-module= < NJS_SRC_ROOT_DIR > /nginx
動的モジュールとして構築された場合、NGINX JavaScript モジュールは
ディレクトリで利用可能になります。その後、モジュールを既存の NGINX インストールにコピーして有効にすることができます。詳細については、「NGINX JavaScript モジュールの有効化」を参照してください。
あるいは、次のコマンドを実行して、ビルドされた NGINX および NGINX JavaScript バイナリをインストールすることを選択することもできます。
重要
NGINX バイナリに標準 (動的ではない) モジュールとして組み込まれている場合、これが最も簡単なインストール方法になります。
make install
デフォルトでは、NGINX バイナリは/usr/local/nginx/sbin/nginx
にインストールされます。 NGINX JavaScript モジュールは/usr/local/nginx/modules/
にコピーされます。
NJS の技術仕様は NGINX の技術仕様と同一です。
サポートされているディストリビューションの完全なリストについては、「テスト済みのオペレーティング システムとプラットフォーム」を参照してください。
NGINX JavaScript は、nginx-1.14 以降のすべての NGINX オープン ソース バージョンと、NGINX Plus R15 以降のすべての NGINX Plus バージョンでサポートされています。
ぜひご参加ください。質問する方法、問題を報告する方法、コードを貢献する方法については、貢献ガイドを参照してください。
更新情報を追跡するには、リリース ページを参照してください。
2 条項 BSD のようなライセンス
追加のドキュメントは https://nginx.org/en/docs/njs/ から入手できます。
©2024 F5, Inc. 無断複写・転載を禁じます。 https://www.f5.com/products/nginx