NGINX JavaScript,也稱為 NJS,是 NGINX 的動態模組,可以使用熟悉的 JavaScript 語法擴充內建功能。 NJS 語言是 JavaScript 的子集,符合 ES5 (ECMAScript 5.1 Strict Variant) 以及一些 ES6 (ECMAScript 6) 和更新的擴充。有關更多詳細信息,請參閱相容性。
NGINX JavaScript 以 NGINX 的兩個動態模組(ngx_http_js_module 和 ngx_stream_js_module)提供,可新增至任何支援的 NGINX 開源或 NGINX Plus 安裝中,而無需重新編譯。
NJS 模組允許 NGINX 管理員:
查看範例以及我們使用 NJS 開發的各種專案:
擴展 NGINX Plus 功能以直接與 OIDC 相容的身份提供者進行通信,對使用者進行身份驗證並授權 NGINX Plus 交付的內容。
NGINX Plus 作為 SAML 身份驗證服務提供者的參考實作。
直接從 NGINX Plus 公開 Prometheus 指標端點。
提示
NJS 也可以與 NGINX Unit 應用程式伺服器一起使用。了解有關 NGINX Unit 的控制 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
上下文。
ngx_http_js_模組
此 NJS 模組可以對透過 HTTP 傳輸的資料進行操作。
ngx_stream_js_模組
此 NJS 模組可以對透過 TCP 和 UDP 等流協定傳輸的資料進行操作。
預設情況下,這兩個模組都安裝到/etc/nginx/modules
目錄中。
NJS 的使用包括啟用模組、新增具有定義函數的 JavaScript 檔案以及呼叫 NGINX 設定檔中的匯出函數。
NGINX JavaScript 是 NGINX Open Source 或 NGINX Plus 的模組。如果您還沒有這樣做,請按照以下步驟安裝 NGINX Open Source 或 NGINX Plus。安裝後,請確保 NGINX 實例正在運行並且能夠回應 HTTP 請求。
發出以下命令來啟動 NGINX:
sudo nginx
curl -I 127.0.0.1
您應該看到以下回應:
HTTP/1.1 200 OK
Server: nginx/1.25.5
安裝後,其中一個(或兩個)NJS 模組必須包含在 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
函數傳回 HTTP 200 OK 狀態回應代碼以及字串“Hello World!”,後面跟著換行符。然後匯出該函數以在 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 使用命令列介面實用程式安裝。此介面可以作為互動式 shell 打開,也可以用於處理來自預定義檔或標準輸入的 JavaScript 語法。由於該實用程式獨立運行,因此 NGINX 特定的物件(例如 HTTP 和 Stream)在其運行時不可用。
$ 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 JavaScript 建置為要整合到 NGINX 的動態模組或獨立的二進位檔案以用作命令列介面公用程式。
重要的
要建立與 NGINX 一起使用的模組,您還需要按照本文檔中概述的步驟複製、配置和建置 NGINX。
大多數 Linux 發行版需要安裝多個相依性才能建置 NGINX 和 NGINX JavaScript。以下說明特定於apt
套件管理器,在大多數 Ubuntu/Debian 發行版及其衍生版本上廣泛使用。
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 互動式 shell,您需要安裝 libedit-dev 函式庫
sudo apt install libedit-dev
從克隆儲存庫的根目錄執行以下命令:
./configure
建置 NGINX JavaScript:
make
該實用程式現在應該位於
。有關使用信息,請參閱 NJS 命令列介面 (CLI)。
將 NGINX 原始碼儲存庫複製到先前複製的 NJS 原始碼儲存庫以外的目錄中。
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
模組。要將 NJS 與 NGINX Stream 模組一起使用,您需要在configure
步驟中啟用它,以便它使用 NGINX 二進位檔案進行建置。這樣做會在 NJS 新增到建置時自動編譯ngx_stream_js_module
模組。實現此目的的一種方法是將configure
步驟變更為:
auto/configure --with-stream --add-dynamic-module= < NJS_SRC_ROOT_DIR > /nginx
編譯模組
make
提示
若要建置將 NGINX JavaScript 嵌入到單一二進位檔案中的 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-1.14 開始的所有 NGINX 開源版本以及從 NGINX Plus R15 開始的所有 NGINX Plus 版本都支援 NGINX JavaScript。
我們鼓勵您與我們互動。請參閱貢獻指南,以了解如何提出問題、報告問題和貢獻代碼的資訊。
請參閱我們的發布頁面以追蹤更新。
2 條款 BSD 類許可證
其他文件位於:https://nginx.org/en/docs/njs/
©2024 F5, Inc. 保留所有權利。 https://www.f5.com/products/nginx