4.3الشبكات المتقدمة والوكيل العكسي (reverse proxy)
الأساسي في 30 ثانية
- نقسم حسب الوظيفة : شبكة أمامية (الوكيل نحو التطبيقات) وشبكة خلفية (التطبيقات نحو القواعد) — فالقاعدة، المحصورة في الخلفية، تبقى غير قابلة للوصول مباشرة حتى لو اختُرق الوكيل.
- منفذ واحد منشور، والباقي موجه : الوكيل العكسي (الأمامي) هو الوحيد المنشور ويوجه حسب اسم المضيف — والتطبيقات لا تفعل إلا العرض داخليا وتُوصَل بأسمائها.
- منعكس إدير : إضافة خدمة = مدخل توجيه واحد، وصفر منفذ إضافي — وإعداد الوكيل مركب في قراءة فقط.
حالة مصغرة متواصلة — إدير يرتب المنافذ المبعثرة خلف واجهة
إدير، مهندس devops مبتدئ في الجزائر، يدير تطبيقين ينشر كل منهما منفذه : الروابط غير مقروءة والقاعدة قابلة للوصول من الشبكة الأمامية. فينشئ شبكتين (أمامية وخلفية)، ولا ينشر إلا منفذ الوكيل، ويوجه بأسماء المضيفين ويحصر القاعدة في الخلفية. ثالث محطة في الخيط الرابط : نقطة دخول وحيدة، وخدمات مقسمة، وصفر منفذ مبعثر.
تتمة حالات 4.1-4.2 — خدمات إدير الموثوقة تُعرض الآن بنظافة.
1. التقسيم : شبكة لكل وظيفة
بعد شبكة وحيدة، نقسم : أمامية (الوكيل نحو التطبيقات) وخلفية (التطبيقات نحو القواعد). وتنتمي الخدمة إلى شبكات عدة عند الحاجة ؛ ولا تكون القاعدة إلا على الخلفية : فحتى مع اختراق الوكيل، تبقى غير قابلة للوصول مباشرة.
والتقسيم عزل ملموس : لا ترى كل شبكة إلا ما يجب أن تراه. ويضع إدير فيه كل خدمة حسب ما يجب أن تصل إليه — ولا شيء آخر.
2. الوكيل العكسي : منفذ واحد للجميع
Traefik أو Nginx في الأمامية : وحده منفذه 80/443 منشور، وهو يوجه حسب اسم المضيف (كل مضيف نحو خدمته). ولا تنشر التطبيقات شيئا بعد : فهي تعرض داخليا ويصلها الوكيل بأسمائها. نقطة دخول واحدة، وN خدمة — وإضافة تطبيق هي مدخل توجيه.
يطبق Nginx (إعداد صريح، مثالي للتعلم) وTraefik (اكتشاف تلقائي، مثالي عندما تتحرك الخدمات) المخطط نفسه : يبدأ إدير ببساطة بإعداد صريح.
3. محليا : أسماء صحيحة، وشهادات مستقبلا
في التطوير، نعلن المضيفين في ملف hosts (كل اسم نحو الآلة المحلية) ؛ وفي الإنتاج، يشفر DNS + TLS الحركة. واحفظوا المخطط : واحد منشور، والباقي موجه.
ويُركَّب إعداد الوكيل في قراءة فقط : فالحاوية تقرؤه دون أن تستطيع إعادة كتابته.
🔎 مثال ملموس — 🔎 مثال ملموس — تطبيقان خلف 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
- إعلان داخلي لمنفذ، دون نشر نحو الخارج.
مثال بسيط: تعرض تطبيقات إدير داخليا ؛ وحده الوكيل ينشر.
ما ليس كذلك: نشر منفذ قابل للوصول من الآلة.
رد فعل: خلف وكيل : اعرضوا، ولا تنشروا.
في التطبيق — عمليا — وضع واجهة
- أنشئوا الشبكتين الأمامية والخلفية.
- أطلقوا تطبيقين غير منشورين على الأمامية.
- أطلقوا الوكيل المنشور مع توجيه بالمضيف.
- اختبروا المضيفين، ثم اقطعوا خلفية : تنجو الأخرى.
نص جاهز للقول — تبرير الواجهة للفريق (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 ساعة — طبّق غدا
خلف وكيل وحيد منشور : اعرضوا تطبيقين غير منشورين موجهين بالمضيفين، وقاعدة محصورة في الخلفية، وإعداد في قراءة فقط.
- أستطيع التقسيم إلى شبكتين أمامية وخلفية.
- أستطيع نشر الوكيل وحده والتوجيه بالمضيفين.
- أستطيع حصر القاعدة وتركيب الإعداد بقراءة فقط.
أسئلة شائعة
Traefik أم Nginx ؟
Nginx : إعداد صريح، مثالي للتعلم. وTraefik : اكتشاف تلقائي بالوسوم، مثالي عندما تتحرك الخدمات. وكلاهما يطبق المخطط نفسه : واحد منشور، وتوجيه بالمضيفين.
هل يلزم وكيل في التطوير ؟
منذ تطبيقين : نعم، ولو بسيطا. فهو الملف نفسه الذي سيصلح في الإنتاج، دون المنافذ المبعثرة.
ثلاث تطبيقات ويب على آلة واحدة، ومنفذ 80 وحيد. ماذا تفعلون ؟