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 Unit. تعرف على المزيد حول واجهة برمجة تطبيقات التحكم الخاصة بوحدة 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 في سياق المستوى الأعلى ("الرئيسي") لتمكين أي من الوحدة (الوحدات) (أو كليهما).
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 الرسمي.
يتم تثبيت 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 وتكوينه وإنشائه باتباع الخطوات الموضحة في هذا المستند.
ستتطلب معظم توزيعات 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، ستحتاج إلى تثبيت مكتبة libedit-dev
sudo apt install libedit-dev
قم بتشغيل الأوامر التالية من الدليل الجذر لمستودعك المستنسخ:
./configure
بناء جافا سكريبت NGINX:
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. سيؤدي القيام بذلك إلى تجميع وحدة 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 موجود وتمكينها. راجع تمكين وحدات JavaScript NGINX للحصول على التفاصيل.
وبدلاً من ذلك، يمكنك اختيار تثبيت ثنائيات 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.
نحن نشجعك على التعامل معنا. يرجى الاطلاع على دليل المساهمة للحصول على معلومات حول كيفية طرح الأسئلة والإبلاغ عن المشكلات والمساهمة في التعليمات البرمجية.
راجع صفحة الإصدار الخاصة بنا لتتبع التحديثات.
2-شرط الترخيص المشابه لـ BSD
الوثائق الإضافية متاحة على: https://nginx.org/en/docs/njs/
©2024 F5, Inc. جميع الحقوق محفوظة. https://www.f5.com/products/nginx