تشغيل مواقع متعددة من إطار عمل ويب Python واحد

StackOverflow https://stackoverflow.com/questions/85119

  •  01-07-2019
  •  | 
  •  

سؤال

ما هي الطرق الجيدة (أو الذكية على الأقل) لتشغيل مواقع متعددة من إطار عمل ويب Python مشترك واحد (على سبيل المثال:أبراج، TurboGears، الخ)؟أعلم أنه يمكنك إجراء إعادة التوجيه بناءً على المجال أو المسار لإعادة كتابة معرف URI للإشارة إلى موقع خاص بالموقع وقد رأيت أيضًا بعض التصرفات الوحشية "if site == 'site1' / elseif / elseif / etc"الذي أود تجنبه.

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

المحلول

جانغو لديه هذا مدمج.يرى إطار المواقع.

كأسلوب عام، قم بتضمين عمود "المضيف" في مخطط قاعدة البيانات الخاص بك المرفق بالبيانات التي تريد أن تكون خاصة بالمضيف، ثم قم بتضمين Host رأس HTTP في الاستعلام عند استرداد البيانات.

نصائح أخرى

باستخدام Django على Apache مع mod_python، أقوم باستضافة مواقع Django متعددة (غير مرتبطة) ببساطة باستخدام تكوين Apache التالي:

<VirtualHost 1.2.3.4>
        DocumentRoot /www/site1
        ServerName site1.com
        <Location />
                SetHandler python-program
                SetEnv DJANGO_SETTINGS_MODULE site1.settings
                PythonPath "['/www'] + sys.path"
                PythonDebug On
                PythonInterpreter site1
        </Location>
</VirtualHost>

<VirtualHost 1.2.3.4>
        DocumentRoot /www/site2
        ServerName site2.com
        <Location />
                SetHandler python-program
                SetEnv DJANGO_SETTINGS_MODULE site2.settings
                PythonPath "['/www'] + sys.path"
                PythonDebug On
                PythonInterpreter site2
        </Location>
</VirtualHost>

لا حاجة لمثيلات أباتشي متعددة أو خوادم بروكسي.يؤدي استخدام توجيه PythonInterpreter مختلف لكل موقع (الاسم الذي تدخله عشوائيًا) إلى إبقاء مساحات الأسماء منفصلة.

أستخدم CherryPy كخادم الويب الخاص بي (الذي يأتي مرفقًا مع Turbogears)، وأقوم ببساطة بتشغيل مثيلات متعددة لخادم الويب CherryPy على منافذ مختلفة مرتبطة بالمضيف المحلي.ثم أقوم بتكوين Apache باستخدام mod_proxy وmod_rewrite لإعادة توجيه الطلبات بشفافية إلى المنفذ المناسب بناءً على طلب HTTP.

يعد استخدام مثيلات خادم متعددة على المنافذ المحلية فكرة جيدة، ولكنك لا تحتاج إلى خادم ويب كامل الميزات لإعادة توجيه طلبات HTTP.

سأستخدم جنيه كوكيل عكسي للقيام بهذه المهمة.إنه صغير وسريع وبسيط ويفعل بالضبط ما نحتاجه هنا.

ما هو الجنيه:

  1. وكيل عكسي:يقوم بتمرير الطلبات من متصفحات العميل إلى واحد أو أكثر من الخوادم الخلفية.
  2. موازن التحميل:سيقوم بتوزيع الطلبات من متصفحات العميل بين العديد من الخوادم الخلفية، مع الاحتفاظ بمعلومات الجلسة.
  3. غلاف SSL:سيقوم باوند بفك تشفير طلبات HTTPS من متصفحات العملاء وتمريرها كـ HTTP عادي إلى الخوادم الخلفية.
  4. معقم HTTP/HTTPS:سيتحقق باوند من صحة الطلبات ويقبل فقط الطلبات الجيدة الصياغة.
  5. فشل في الخادم الزائد:في حالة فشل الخادم الخلفي، سوف يأخذ باوند في الاعتبار هذه الحقيقة ويتوقف عن تمرير الطلبات إليه حتى يتعافى.
  6. معيد توجيه الطلب:قد يتم توزيع الطلبات بين الخوادم وفقًا لعنوان URL المطلوب.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top