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 Open Source หรือ NGINX Plus ที่รองรับโดยไม่ต้องคอมไพล์ใหม่
โมดูล NJS ช่วยให้ผู้ดูแลระบบ NGINX สามารถ:
ดูตัวอย่างและโครงการต่างๆ ของเราที่พัฒนาร่วมกับ NJS:
ขยายฟังก์ชันการทำงานของ NGINX Plus เพื่อสื่อสารโดยตรงกับผู้ให้บริการข้อมูลระบุตัวตนที่เข้ากันได้กับ OIDC การตรวจสอบสิทธิ์ผู้ใช้ และการอนุญาตเนื้อหาที่จัดส่งโดย NGINX Plus
อ้างอิงการใช้งาน NGINX Plus ในฐานะผู้ให้บริการสำหรับการตรวจสอบสิทธิ์ SAML
เปิดเผยจุดสิ้นสุดการวัด Prometheus โดยตรงจาก NGINX Plus
เคล็ดลับ
NJS ยังสามารถใช้ได้กับแอปพลิเคชันเซิร์ฟเวอร์หน่วย NGINX เรียนรู้เพิ่มเติมเกี่ยวกับ Control API ของหน่วย NGINX และวิธีกำหนดการเรียกใช้ฟังก์ชันด้วย NJS
ทำตามขั้นตอนเหล่านี้เพื่อดาวน์โหลดและติดตั้งไบนารี NGINX และ NGINX JavaScript Linux ที่คอมไพล์แล้ว คุณสามารถเลือกสร้างโมดูลแบบโลคัลจากซอร์สโค้ดได้
ปฏิบัติตามคำแนะนำนี้เพื่อเพิ่มพื้นที่เก็บข้อมูลแพ็กเกจ NGINX อย่างเป็นทางการให้กับระบบของคุณ และติดตั้ง NGINX Open Source หากคุณติดตั้ง 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_module
โมดูล NJS นี้เปิดใช้งานการจัดการข้อมูลที่ส่งผ่าน HTTP
ngx_stream_js_module
โมดูล 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 ในบริบทระดับบนสุด (“main”) เพื่อเปิดใช้งานโมดูลอย่างใดอย่างหนึ่ง (หรือทั้งสองอย่าง)
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 ติดตั้งด้วยยูทิลิตีอินเทอร์เฟซบรรทัดคำสั่ง อินเทอร์เฟซสามารถเปิดเป็นเชลล์แบบโต้ตอบหรือใช้ในการประมวลผลไวยากรณ์ 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 โดยทำตามขั้นตอนที่ระบุไว้ในเอกสารนี้
ลีนุกซ์ส่วนใหญ่จะต้องมีการติดตั้งการขึ้นต่อกันหลายอย่างเพื่อสร้าง NGINX และ NGINX JavaScript คำแนะนำต่อไปนี้เป็นคำแนะนำเฉพาะสำหรับ apt
package manager ซึ่งมีใช้กันอย่างแพร่หลายใน 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 คุณจะต้องติดตั้งไลบรารี libedit-dev
sudo apt install libedit-dev
รันคำสั่งต่อไปนี้จากไดเร็กทอรีรากของที่เก็บโคลนของคุณ:
./configure
สร้างจาวาสคริปต์ NGINX:
make
ขณะนี้ยูทิลิตีควรพร้อมใช้งานที่
โปรดดู NJS Command Line Interface (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 การทำเช่นนี้จะคอมไพล์โมดูล ngx_stream_js_module
โดยอัตโนมัติเมื่อมีการเพิ่ม NJS เข้ากับบิลด์ วิธีหนึ่งในการบรรลุเป้าหมายนี้คือการเปลี่ยนขั้นตอน configure
เป็น:
auto/configure --with-stream --add-dynamic-module= < NJS_SRC_ROOT_DIR > /nginx
รวบรวมโมดูล
make
เคล็ดลับ
หากต้องการสร้าง NGINX ด้วย NGINX JavaScript ที่ฝังอยู่ในไบนารีเดียว ให้แก้ไขขั้นตอน 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 Open Source ทุกเวอร์ชันที่ขึ้นต้นด้วย nginx-1.14 และเวอร์ชัน NGINX Plus ทั้งหมดที่ขึ้นต้นด้วย NGINX Plus R15
เราสนับสนุนให้คุณมีส่วนร่วมกับเรา โปรดดูคู่มือการสนับสนุนสำหรับข้อมูลเกี่ยวกับวิธีการถามคำถาม รายงานปัญหา และรหัสสนับสนุน
ดูหน้าเผยแพร่ของเราเพื่อติดตามการอัปเดต
ใบอนุญาตเหมือน BSD แบบ 2 ข้อ
ดูเอกสารเพิ่มเติมได้ที่: https://nginx.org/en/docs/njs/
©2024 F5, Inc. สงวนลิขสิทธิ์ https://www.f5.com/products/nginx