سؤال

أستخدم خادمًا واحدًا لاستضافة عدة تطبيقات ويب Node.js ، والتي يتم توزيعها عبر نطاقات متعددة. ممارستي الحالية هي تشغيل خادم Express لكل تطبيق على منفذ مختلف ، وتشغيل خادم أساسي يقوم ببساطة بتوجيه الطلبات (إعادة التوجيه) إلى المنفذ الصحيح / الخادم السريع. يعمل هذا ، ولكنه يعني أن خادمي الأساسي يقوم بتوجيه كل طلب HTTP واحد (ومن خلال إعادة توجيهه يدويًا) ، وأن المستخدمين يرون تطبيقاتي مستضافة على [hostname.com]: 8000.

بعد قليل من البحث ، اكتشفت أنه يمكنني استخدام http-proxy لاحتياجات التوجيه الخاصة بي ، لكني ما زلت أرغب في معرفة ما إذا كانت هناك أفضل الممارسات لتشغيل عدة خوادم Express على نفس النظام. وإليك كيف أخطط للقيام بذلك:

سيكون لكل تطبيق ويب مجلده الخاص به ، مع بنية مجلد Express كاملة (app.js ، مسارات ، طرق عرض ، إلخ.) سيتم تجميع التطبيقات حسب المجال ، لذلك سيكون مثال بنية المجلد: Genacodicetagpre

سأضطر إلى تشغيل كل app.js بشكل منفصل باستخدام العقدة (أو باستخدام للأبد ، والتي أنا أستخدم حاليًا) ، وسيتعين على كل واحد استخدام منفذ مختلف داخليًا ، مع توجيه عمليات إعادة التوجيه عبر التطبيقات إلى منفذ التطبيق الهدف.

إذًا ، هذه خطتي الحالية. ما هي المشاكل معها ، وما هي المزالق التي يجب أن أحاول تجنبها؟ الأهم من ذلك ، هل هناك حل ثابت لهذه المشكلة - مشكلة استضافة تطبيقات ويب متعددة على نفس النظام باستخدام Node.js / Express؟

التحرير: أخطط لاستخدام WebSockets و HTTPS في النهاية ، ومقدار النطاق الترددي الذي يمكن أن يدعمه إعدادي ليس له أهمية كبيرة بالنسبة لي - هذا خادم تطوير (على الأقل في الوقت الحالي). شكرًا لـ David Ellis على طرحه لمسألة WebSockets.

التعديل الثاني: شكرًا لكل من EhevuTov و David Ellis على إجاباتهما ، وكلاهما ساعد كثيرًا. ما زلت أستقر على بنية عامة لطلبي ، ويبدو أن هذا السؤال تمت معالجته ببعض التفصيل بواسطة سؤال StackOverflow

التحرير الثالث: لقد قطعت طرقًا منذ أن نشرت هذا السؤال (على الرغم من أن لدي الكثير لأذهب إليه). تحقق من هذا الملف في مستودع GitHub الخاص بي ، والذي يستفيد من تعلمت من إجابات هذا السؤال!

هل كانت مفيدة؟

المحلول

نظرًا لأن Express يستخدم Connect ، فأنا متأكد من أنه يمكنك استخدام البرامج الوسيطة للمضيف الظاهري من Connect.تعمل بشكل مشابه لوحدات vhost الأخرى على المنتجات الأخرى.ليس لدي نطاقات متعددة لاختبارها وإظهار الشفرة الصحيحة لك ، لكنني أعتقد أنها شيء من هذا القبيل: Genacodicetagpre

إذا وصلت إلى النقطة التي لا يكفي فيها خادم Express واحد ، فابحث في استخدام Node.Cluster من واجهة برمجة التطبيقات.إذا لم يكن ذلك كافيًا أيضًا ، فإن الممارسة الحالية هي وضع وكيل عكسي asnyc مثل Nginx أمام خوادم Express وتوجيه الوكلاء إلى خوادم Express الخاصة بك.

نصائح أخرى

إذا لم تكن بحاجة إلى استخدام WebSockets (أو أي ميزة HTTP 1.1 بالفعل) ، يمكنك استخدام NginX كوكيلك بدلاً من ذلك .

الميزة هي أن إجمالي الحمل الذي يمكن لـ NginX التعامل معه مقابل Node أعلى (يتم تجميعه بشكل ثابت ومتخصص لهذا النوع من الأشياء ، بشكل أساسي) ، لكنك تفقد القدرة على دفق أي بيانات (إرسال أجزاء أصغر في كل مرة).

بالنسبة إلى موقع أصغر ، أو إذا لم تكن متأكدًا من الميزات التي ستحتاج إليها في المستقبل ، فمن الأفضل التمسك برمز الشفرة العامة والتحول إلى NginX فقط إذا كان بإمكانك إثبات أن الوكيل هو العقبة على خادمك.لحسن الحظ ، ليس من الصعب إعداد NginX إذا احتجت إليه لاحقًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top