هذا المقال يتطلب مستوى: مبتدئ
الـ Reverse Proxy للمبتدئ: ليه بتحط NGINX قدام تطبيقك؟
لو تطبيقك شغّال على المنفذ 3000 ومربوط بالإنترنت مباشرة، إنت فاتح باب لثلاث مشاكل: مفيش HTTPS، مفيش حماية، ولو التطبيق وقع الموقع كله يقع. بعد المقال ده هتعرف تحط بوابة واحدة قدامه تحل التلاتة في أقل من 10 دقايق.
المشكلة باختصار
لما تشغّل تطبيق Node أو Python، هو بيسمع على منفذ زي 3000. أسهل طريقة إنك تربط الدومين بالسيرفر على المنفذ ده والدنيا تمشي. لكن ساعتها كل زائر بيكلّم تطبيقك على طول. يعني تطبيقك هو اللي لازم يتعامل مع الـ HTTPS، ومع الزحمة، ومع أي طلب خبيث. ولو عندك أكتر من نسخة من التطبيق، مفيش حاجة بتوزّع عليهم.
الحل إنك تحط Reverse Proxy. هو خادم بيقف قدام تطبيقك، يستقبل كل الطلبات الجاية من النت، وينقلها للتطبيق في الخلف. الزائر يكلّم البوابة بس، والتطبيق يفضل مستخبي على منفذ داخلي مش موصول بالنت أصلاً.
يعني إيه Reverse Proxy؟ نبدأ بمثال
تخيّل مبنى شركة كبير. أي حد داخل مش بيمشي لمكتب الموظف اللي عايزه دوغري. بيعدّي الأول على موظف الاستقبال في اللوبي. الاستقبال بيتأكد من هويته، يقوله استنى شوية، وبعدين يوجّهه للمكتب الصح. المكاتب نفسها مقفولة، محدش من بره بيوصلها مباشرة.
الـ Reverse Proxy هو موظف الاستقبال ده بالظبط. العميل (المتصفح) بيوصل للبوابة، والبوابة بتقرر تبعت الطلب لأنهي نسخة من تطبيقك، وترجّع الرد. العميل مش عارف مين اللي ردّ عليه فعلاً.
دلوقتي بالتعريف الدقيق: الـ Reverse Proxy هو خادم وسيط بيستقبل طلبات العملاء نيابةً عن خادم واحد أو أكتر في الخلف، وبيمرّر الردود للعميل. الفرق بينه وبين الـ Forward Proxy إن الـ Forward بيقف جنب العميل ويخفيه (زي VPN)، أما الـ Reverse فبيقف جنب الخادم ويخفيه. الاتجاه معكوس، ومن هنا جه الاسم.
الأربع حاجات اللي بيعملهالك
- إنهاء الـ TLS (HTTPS): البوابة هي اللي بتحمل شهادة SSL وبتفك تشفير الطلب، فتطبيقك يشتغل HTTP عادي في الداخل من غير ما تلمس كوده. تركّب الشهادة في مكان واحد بدل ما تكررها في كل نسخة.
- موازنة الحمل (Load Balancing): لو عندك 3 نسخ من التطبيق، البوابة بتوزّع الطلبات عليهم بالتساوي. لو نسخة وقعت، بتوقف عن إرسال الطلبات ليها لوحدها.
- التخزين المؤقت (Caching): الملفات الثابتة زي الصور وملفات CSS ممكن البوابة تحتفظ بيها وترجّعها من غير ما تتعب تطبيقك في كل مرة.
- تحديد معدل الطلبات (Rate Limiting): تقدر تقول "أقصى 20 طلب في الثانية من نفس الآيبي" فتحمي تطبيقك من الزحمة المفاجئة أو محاولات الإساءة.
مثال تنفيذي: NGINX قدام تطبيقك
ده أبسط إعداد. تطبيقك شغّال على 127.0.0.1:3000، وNGINX هيستقبل من النت ويمرّر ليه. حط الإعداد ده في /etc/nginx/sites-available/app.conf: