0Pricing
Lua Academy · درس

بنية OpenResty

افهم كيفية تضمين ngx_lua لـ LuaJIT في مراحل معالجة الطلبات في Nginx

بنية OpenResty درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.

ما هو OpenResty؟

OpenResty عبارة عن منصة ويب تدمج LuaJIT في Nginx. وتحول Nginx إلى خادم تطبيقات ويب متكامل الميزات، حيث تتولى شفرة Lua معالجة الطلبات.

وحدة ngx_lua

تدمج وحدة ngx_lua LuaJIT في Nginx. وتوفر واجهة برمجة التطبيقات ngx.* للوصول إلى بيانات الطلب والاستجابة، والمؤقتات، والذاكرة المشتركة، وcosockets.

مراحل الطلب في Nginx

تكشف OpenResty مراحل معالجة الطلب في Nginx على شكل خطافات Lua: init_by_lua وaccess_by_lua وcontent_by_lua وheader_filter_by_lua وlog_by_lua.

أساسيات nginx.conf

اضبط معالجات Lua في nginx.conf باستخدام التوجيه المناسب للمرحلة.

# nginx.conf snippet
server {
  listen 80;
  location /hello {
    content_by_lua_block {
      ngx.header["Content-Type"] = "text/plain"
      ngx.say("Hello from Lua!")
    }
  }
}

نموذج coroutine لكل طلب

يحصل كل طلب وارد على coroutine خاصة به في Lua. وعندما تتوقف coroutine مؤقتًا، مثلًا أثناء انتظار قاعدة بيانات، يعالج Nginx طلبات أخرى. ويتيح ذلك تزامنًا عاليًا من دون حجب التنفيذ.

واجهة برمجة التطبيقات ngx

أهم دوال ngx: ngx.say()، ngx.print()، ngx.header، ngx.var، ngx.req.*، ngx.status، ngx.exit().

حالة الذاكرة المشتركة

تتشارك عمليات العامل البيانات عبر ngx.shared.DICT، وهو قاموس مشترك يُعرَّف في nginx.conf بحجم ذاكرة ثابت.

# nginx.conf
lua_shared_dict my_cache 10m;
-- In Lua:
ngx.shared.my_cache:set("key", "value", 60)

المقابس التعاونية

توفر مقابس OpenResty التعاونية اتصالات TCP/UDP وHTTP غير حاجبة. وهي تتكامل مع حلقة أحداث Nginx، ما يتيح لـ Lua تنفيذ عمليات إدخال وإخراج غير متزامنة دون حجب العامل.

واجهة المؤقتات

تُجدول ngx.timer.at(delay, fn) تشغيل دالة Lua بعد انقضاء مدة معينة. أما ngx.timer.every(interval, fn) فتشغّل الدالة بشكل دوري.

خصائص الأداء

تتعامل OpenResty مع عشرات الآلاف من الاتصالات المتزامنة لكل عامل. وبالاقتران مع سرعة LuaJIT وتعدد الإرسال المُثبت لعمليات الإدخال والإخراج في Nginx، تنافس OpenResty Go وNode.js في أعباء العمل المعتمدة على الإدخال والإخراج.

حالات الاستخدام الشائعة

  • بوابات API وتحديد معدل الطلبات.
  • البرمجيات الوسيطة للمصادقة والتفويض.
  • التوجيه الديناميكي للطلبات.
  • طبقات التخزين المؤقت باستخدام Redis وMemcached.

سؤال حول OpenResty

كيف تحقق OpenResty درجة عالية من التزامن؟

مراجعة: بنية OpenResty

تضمّن OpenResty ‏LuaJIT داخل Nginx. ويُنفَّذ كل طلب بوصفه coroutine. وتوفر واجهة ngx.* الوصول إلى بيانات الطلب والاستجابة، والذاكرة المشتركة، والمؤقتات، والمقابس التعاونية غير الحاجبة.

الأسئلة الشائعة

هل درس «بنية OpenResty» مجاني؟

نعم — نص درس «بنية OpenResty» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.

ماذا ستتعلم في «بنية OpenResty»؟

افهم كيفية تضمين ngx_lua لـ LuaJIT في مراحل معالجة الطلبات في Nginx تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟

لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «بنية OpenResty»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟

نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. بنية OpenResty
  2. معالجة طلبات HTTP في Lua
  3. ‏Cosockets وTCP غير الحاجب
  4. قواميس الذاكرة المشتركة
← العودة إلى Lua Academy