4.3 · الشبكات المتقدمة والوكيل العكسي (reverse proxy)

المستوى 4 · السجلات (registres)، والموثوقية (fiabilité) و CI

4.3الشبكات المتقدمة والوكيل العكسي (reverse proxy)

الهدف: عرض خدمات عدة خلف نقطة دخول وحيدة نظيفة.
الوقت المقدّر: 13 دقيقة · قراءة ذاتية · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 30 ثانية

  • نقسم حسب الوظيفة : شبكة أمامية (الوكيل نحو التطبيقات) وشبكة خلفية (التطبيقات نحو القواعد) — فالقاعدة، المحصورة في الخلفية، تبقى غير قابلة للوصول مباشرة حتى لو اختُرق الوكيل.
  • منفذ واحد منشور، والباقي موجه : الوكيل العكسي (الأمامي) هو الوحيد المنشور ويوجه حسب اسم المضيف — والتطبيقات لا تفعل إلا العرض داخليا وتُوصَل بأسمائها.
  • منعكس إدير : إضافة خدمة = مدخل توجيه واحد، وصفر منفذ إضافي — وإعداد الوكيل مركب في قراءة فقط.

حالة مصغرة متواصلة — إدير يرتب المنافذ المبعثرة خلف واجهة

إدير، مهندس devops مبتدئ في الجزائر، يدير تطبيقين ينشر كل منهما منفذه : الروابط غير مقروءة والقاعدة قابلة للوصول من الشبكة الأمامية. فينشئ شبكتين (أمامية وخلفية)، ولا ينشر إلا منفذ الوكيل، ويوجه بأسماء المضيفين ويحصر القاعدة في الخلفية. ثالث محطة في الخيط الرابط : نقطة دخول وحيدة، وخدمات مقسمة، وصفر منفذ مبعثر.

تتمة حالات 4.1-4.2 — خدمات إدير الموثوقة تُعرض الآن بنظافة.

1. التقسيم : شبكة لكل وظيفة

بعد شبكة وحيدة، نقسم : أمامية (الوكيل نحو التطبيقات) وخلفية (التطبيقات نحو القواعد). وتنتمي الخدمة إلى شبكات عدة عند الحاجة ؛ ولا تكون القاعدة إلا على الخلفية : فحتى مع اختراق الوكيل، تبقى غير قابلة للوصول مباشرة.

والتقسيم عزل ملموس : لا ترى كل شبكة إلا ما يجب أن تراه. ويضع إدير فيه كل خدمة حسب ما يجب أن تصل إليه — ولا شيء آخر.

2. الوكيل العكسي : منفذ واحد للجميع

Traefik أو Nginx في الأمامية : وحده منفذه 80/443 منشور، وهو يوجه حسب اسم المضيف (كل مضيف نحو خدمته). ولا تنشر التطبيقات شيئا بعد : فهي تعرض داخليا ويصلها الوكيل بأسمائها. نقطة دخول واحدة، وN خدمة — وإضافة تطبيق هي مدخل توجيه.

يطبق Nginx (إعداد صريح، مثالي للتعلم) وTraefik (اكتشاف تلقائي، مثالي عندما تتحرك الخدمات) المخطط نفسه : يبدأ إدير ببساطة بإعداد صريح.

3. محليا : أسماء صحيحة، وشهادات مستقبلا

في التطوير، نعلن المضيفين في ملف hosts (كل اسم نحو الآلة المحلية) ؛ وفي الإنتاج، يشفر DNS + TLS الحركة. واحفظوا المخطط : واحد منشور، والباقي موجه.

ويُركَّب إعداد الوكيل في قراءة فقط : فالحاوية تقرؤه دون أن تستطيع إعادة كتابته.

خطأ شائع في الفهم: « يجب أن ينشر كل تطبيق منفذه، ويمكن أن تبقى القاعدة على الشبكة الأمامية للتبسيط ». لا. فنشر كل تطبيق يعني منافذ مبعثرة وأسطحا مكشوفة بقدرها ؛ وقاعدة على الأمامية قابلة للوصول مباشرة من المدخل. واحد منشور (الوكيل)، وتوجيه بالمضيفين، وقاعدة محصورة في الخلفية : هذا الثلاثي هو ما يصنع واجهة نظيفة.
العرض خلف واجهة وحيدة واحد منشور، والباقي موجه ومقسم شبكات مقسمة أماميةوخلفية منفصلتانوكيل وحيد منشور منفذوحيد في المدخلتوجيه بالمضيف كل اسمنحو خدمتهقاعدة محصورة خلفية فقط،وإعداد بقراءة فقط
واحد منشور، والباقي موجه ومقسم
نص المخطط (SEO / قارئات الشاشة / الترجمة): 1) ينشئ إدير شبكتين : أمامية (الوكيل نحو التطبيقات) وخلفية (التطبيقات نحو القواعد). 2) يطلق تطبيقاته غير المنشورة على الأمامية ويحصر القاعدة في الخلفية. 3) ينشر منفذ الوكيل وحده، الذي يوجه بأسماء المضيفين مع إعداد مركب بقراءة فقط. 4) يختبر كل مضيف، ثم يتحقق من بقاء قاعدة غير قابلة للوصول من الأمامية. الدرس : قسم، وانشر نقطة وحيدة، ووجه بالأسماء.

🔎 مثال ملموس — 🔎 مثال ملموس — تطبيقان خلف Nginx

واجهة إدير : وحده الوكيل ينشر المنفذ 80.

services:
  proxy:
    image: nginx:1.27
    ports: ["80:80"]
    volumes: [./proxy.conf:/etc/nginx/conf.d/default.conf:ro]
    networks: [frontal]
  app1:
    image: nginx:1.27
    networks: [frontal]
  app2:
    image: nginx:1.27
    networks: [frontal]
networks:
  frontal:
  backend:

القراءة : وحده الوكيل ينشر المنفذ 80 ؛ ولا ترى التطبيقات إلا عبره.

الدرس : إضافة تطبيق ثالث = مدخل توجيه، وصفر منفذ إضافي.

مفردات القسم

الوكيل العكسي (Reverse proxy)
واجهة تستقبل الطلبات وتوجهها نحو الخدمات الصحيحة حسب أسماء المضيفين.

مثال بسيط: يرسل وكيل إدير كل مضيف نحو تطبيقه.

ما ليس كذلك: نشر كل منفذ تطبيق نحو الخارج.

رد فعل: لخدمات عدة ومنفذ وحيد : ضعوا واجهة.

التقسيم (Segmentation)
التقطيع إلى شبكات حسب الوظيفة (أمامية، وخلفية) لعزل التدفقات.

مثال بسيط: يحصر إدير قاعدته في الخلفية، غير قابلة للوصول من المدخل.

ما ليس كذلك: شبكة وحيدة حيث يرى الكل الكل.

رد فعل: لقاعدة بيانات : ليست على الشبكة الأمامية أبدا.

التوجيه بالمضيف
كل اسم مضيف يُوجَّه نحو خدمته (مضيف = تطبيق).

مثال بسيط: لكل تطبيق من تطبيقات إدير اسمه، يوجهه الوكيل.

ما ليس كذلك: منفذ مختلف مرتجل لكل تطبيق.

رد فعل: لخدمة جديدة : مدخل توجيه، وليس منفذا.

EXPOSE
إعلان داخلي لمنفذ، دون نشر نحو الخارج.

مثال بسيط: تعرض تطبيقات إدير داخليا ؛ وحده الوكيل ينشر.

ما ليس كذلك: نشر منفذ قابل للوصول من الآلة.

رد فعل: خلف وكيل : اعرضوا، ولا تنشروا.

في التطبيق — عمليا — وضع واجهة

  1. أنشئوا الشبكتين الأمامية والخلفية.
  2. أطلقوا تطبيقين غير منشورين على الأمامية.
  3. أطلقوا الوكيل المنشور مع توجيه بالمضيف.
  4. اختبروا المضيفين، ثم اقطعوا خلفية : تنجو الأخرى.
تتقاسم خدمات عدة نقطة دخول وحيدة ومقسمة.

نص جاهز للقول — تبرير الواجهة للفريق (30 ثانية)

« معكم إدير : بدلا من منفذ لكل تطبيق، لا نعرض إلا الوكيل وهو يوجه بالأسماء. ولم تعد التطبيقات قابلة للوصول مباشرة، وبقيت القاعدة محصورة في شبكتها، والتطبيق التالي لن يكلف إلا سطر توجيه. »

يُقال عندما يُقترح بعد « منفذ آخر » : اعرضوا قائمة المنافذ الحالية.

نموذج للنسخ واللصق — واجهة Nginx + شبكات (Compose)

services:
  proxy:
    image: nginx:1.27
    ports: ["80:80"]
    volumes: [./proxy.conf:/etc/nginx/conf.d/default.conf:ro]
    networks: [frontal]
  app1:
    image: nginx:1.27
    networks: [frontal]
  app2:
    image: nginx:1.27
    networks: [frontal]
networks:
  frontal:
  backend:

تطبيق ثان

مثل إدير : مدخل توجيه آخر، ولا منفذ منشور إضافي.

خدمات تتحرك كثيرا

المرور إلى Traefik : اكتشاف تلقائي للخدمات، مع مخطط الواجهة الوحيدة نفسه.

قاعدة تُحمى

قاعدة محصورة في الخلفية، تُوصَل بالاسم من التطبيقات : غير قابلة للوصول من المدخل.

تطوير محلي

أسماء معلنة في ملف hosts : ملف الواجهة نفسه يصلح محليا ثم في الإنتاج.

✓ ممارسات جيدة

  • واحد منشور : الوكيل.
  • مسارات بأسماء مضيفين صريحة.
  • إعداد الوكيل بتركيب قراءة فقط.

✗ أخطاء شائعة

  • نشر كل تطبيق (منافذ مبعثرة).
  • قاعدة على الشبكة الأمامية.
  • إعداد وكيل قابل للكتابة من الحاوية.

النقاط الأساسية

  • قسموا : أمامية مقابل خلفية.
  • وكيل واحد منشور يوجه الكل.
  • تطبيقات غير منشورة، تُوصَل بالأسماء.
  • TLS في الإنتاج، وhosts في التطوير.

تحدي 48 ساعة — طبّق غدا

خلف وكيل وحيد منشور : اعرضوا تطبيقين غير منشورين موجهين بالمضيفين، وقاعدة محصورة في الخلفية، وإعداد في قراءة فقط.

قائمة الخروج من القسم
  • أستطيع التقسيم إلى شبكتين أمامية وخلفية.
  • أستطيع نشر الوكيل وحده والتوجيه بالمضيفين.
  • أستطيع حصر القاعدة وتركيب الإعداد بقراءة فقط.
تقييم ذاتي 1-5 : كم منفذا ما زالت تطبيقاتي تنشر ؟هل قاعدتي قابلة للوصول من الشبكة الأمامية ؟

أسئلة شائعة

Traefik أم Nginx ؟

Nginx : إعداد صريح، مثالي للتعلم. وTraefik : اكتشاف تلقائي بالوسوم، مثالي عندما تتحرك الخدمات. وكلاهما يطبق المخطط نفسه : واحد منشور، وتوجيه بالمضيفين.

هل يلزم وكيل في التطوير ؟

منذ تطبيقين : نعم، ولو بسيطا. فهو الملف نفسه الذي سيصلح في الإنتاج، دون المنافذ المبعثرة.

تحقّق من فهمك

ثلاث تطبيقات ويب على آلة واحدة، ومنفذ 80 وحيد. ماذا تفعلون ؟

موارد إضافية (اختياري، للتعمّق أكثر)

اختبار المستوى 4أسئلة جديدة وأصعب للتحقق من مكتسباتك