النطاقات القديمة متعددة المواقع لا تزال تقدم المنتدى الافتراضي بعد تعطيل Multisite

كنا سابقًا نقوم بتشغيل إعداد Discourse متعدد المواقع بحوالي 22 منتدى مختلفًا. مؤخرًا، قررنا إزالة تكوين المواقع المتعددة والاحتفاظ بالموقع الافتراضي فقط:

الموقع الافتراضي الآن: forum.mamapedia.com
تمت إزالة نطاق المواقع المتعددة القديم: forum.employ.com (و 21 نطاقًا آخر)

المشكلة:

حتى بعد تعطيل إعداد المواقع المتعددة، لا تزال نطاقات المواقع المتعددة القديمة قادرة على تقديم المنتدى الافتراضي (forum.mamapedia.com). على سبيل المثال:

  • زيارة forum.mamapedia.com تعمل كما هو متوقع
  • ولكن زيارة forum.employ.com لا تزال تقوم بتحميل منتدى Mamapedia

كنا نتوقع أن النطاقات القديمة مثل forum.employ.com إما:

  1. ستعرض خطأ (نظرًا لعدم تكوينها بعد الآن)
  2. ستعيد التوجيه بشكل صحيح أو تكون غير نشطة تمامًا

ملاحظات الإعداد:

  • نحن نستخدم شهادات SSL من Cloudflare مع تمكين خيار الوكيل (لا يمر المرور عبر خادمنا مباشرة).
  • يمكننا إزالة سجلات A للنطاقات القديمة، ولكننا نريد حقًا تحديد السبب الجذري وإصلاحه بدلاً من الاعتماد على حل بديل يعتمد على DNS.

الخطوات المتخذة حتى الآن:

  1. تمت إزالة إعدادات المواقع المتعددة من discourse.conf وقاعدة البيانات
  2. تمت إعادة تشغيل Discourse وتم التحقق من إعدادات app.yml
  3. تم مسح ذاكرة التخزين المؤقت والاختبار في وضع التصفح المتخفي

السلوك المتوقع:

  • يجب أن يستمر forum.mamapedia.com في العمل
  • يجب ألا يقوم forum.employ.com والنطاقات القديمة الأخرى بتقديم منتدى Mamapedia

أسئلة:

  1. كيف يمكننا إزالة النطاقات القديمة بشكل صحيح بحيث لا تقدم المنتدى الافتراضي؟
  2. هل نحتاج إلى تعديل إعدادات Nginx/Traefik، أو إعدادات Cloudflare، أم أن هناك تكوينًا خاصًا بـ Discourse فاتنا؟

تكوين Nginx

عليك الانتقال إلى تثبيت قياسي. الأشياء التي قمت بها لجعل النظام متعدد المواقع تهدف إلى جعل الخادم قادرًا على خدمة مجموعة من النطاقات.

إذا قمت بإنشاء خادم جديد واستعادة النسخة الاحتياطية، فلن تتمكن من كسر أي شيء لأنه سيتحول ببساطة إلى النسخة القديمة.

الحيلة الوحيدة هي أنه يتعين عليك توجيه DNS إلى الخادم الجديد أثناء إعادة البناء حتى يتمكن من الحصول على شهادة. واجعل DNS الخاص بك على كلاودفلير فقط.

إعجاب واحد (1)

شكراً @pfaffman، لقد حاولنا التبديل من إعداد متعدد المواقع إلى تثبيت قياسي، لكن المشكلة لا تزال قائمة.

ما فعلناه:

  1. إزالة تثبيت Discourse:
    • حذف الدليل /var/discourse بالكامل.
  2. إعادة تثبيت Discourse:
    • استنساخ مستودع Discourse مرة أخرى.
    • إعادة إنشاء app.yml بالتكوينات اللازمة.
  3. إعادة بناء التطبيق:
    • تشغيل ./launcher rebuild app.
  4. تحديث DNS:
    • توجيه النطاق إلى الخادم الجديد.
    • ضبط Cloudflare على وضع DNS-only للسماح بإصدار شهادة SSL.

مشكلة إضافية مع SSL:

أسئلة:

  1. هل يمكن أن تكون المشكلة متعلقة بعدم استعادة نسخة احتياطية من قاعدة البيانات؟
  2. هل هناك خطوات إضافية مطلوبة لتنظيف تكوينات متعددة المواقع القديمة؟
  3. ما هي الطريقة الصحيحة لتمكين SSL في هذا الإعداد دون مواجهة مشاكل؟

نقدر أي توجيه من أولئك الذين قاموا بذلك من قبل!

إعجاب واحد (1)

هل قمت بتشغيل إعداد discourse أم قمت بذلك يدويًا؟

هل لديك قوالب ssl و let’s encrypt؟

إذا قمت بإعادة البناء عدة مرات مع السحابة البرتقالية، فقد تكون قد وصلت إلى الحد الأقصى لمعدل الطلبات.

إعجاب واحد (1)

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

وجود السجلات القديمة توجه إلى موقعك، هو السبب الجذري.
تنظيف إعداداتك القديمة ليس حلاً مؤقتًا، بل هو الحل.

إعجابَين (2)

OMG. لا أتذكر آخر مرة اختلفت معك فيها في مسألة واقعية. كقاعدة عامة، عندما أرى صورتك الرمزية في موضوع علقت عليه، أعرف أنني سأتعلم شيئًا!

هذا صحيح. يدعون، مع ذلك، أنهم تحولوا إلى تثبيت قياسي. لا أصدقهم.

لعدة سنوات الآن (ولكن أعتقد منذ أن أصبح شهادة Let’s Encrypt متاحة)، في تثبيت قياسي إذا قمت بالوصول إليه عبر أي اسم مضيف آخر، فسيقوم بإعادة توجيه (يمكنك التحقق بسهولة عن طريق استخدام رقم IP وقمت للتو بإجراء آخر عن طريق تعيين forum.bigmouth.bass في /etc/hosts إلى تثبيت قياسي وتمت إعادة توجيهه كما هو متوقع. إذا قمت بالوصول إليه عبر https، وهو ما تفعله معظم المتصفحات افتراضيًا الآن، فستحصل على خطأ في الشهادة.

إذا كان كل ما هو مطلوب للوصول إلى موقعك عبر اسم مضيف آخر هو DNS، فيمكن لأي شخص اختطاف موقعك عن طريق إنشاء سجل DNS يشير إلى موقعك.

أعتقد أن هذا هو السحر:

تخميني هو أن app.yml لا يزال يحتوي على شيء مثل هذا:

3 إعجابات

[اقتباس=“جاي فافمان، المشاركة:6، الموضوع:351365، اسم المستخدم:pfaffman”]
أنا أعلم أنني سأتعلم شيئًا!
[/اقتباس]

حسنًا، حتى الآن تعلمت أنني يجب أن أُحدّث معلوماتي بشكل أكثر تكرارًا! ذلك الكود موجود منذ عام 2014، لذا أعتقد أنني كنت أعيش في الماضي بشكل كبير.

أنت على حق تمامًا، سوف يعيد التوجيه.

إعجابَين (2)

شكرًا @RGJ ، @pfaffman ،

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

  1. إعداد Nginx: هل هناك طريقة للتحقق مما إذا كانت منطق إعادة التوجيه من templates/web.ssl.template.yml يُطبّق بالفعل؟ هل يتعين علينا فحص إعداد Nginx المُولد يدويًا داخل الحاوية؟

  2. تصحيح أخطاء Discourse: هل هناك سجلات أو أوامر يمكننا تشغيلها داخل الحاوية للتأكد من أن Discourse يتعامل مع أسماء المضيف بشكل صحيح؟

  3. أسباب محتملة أخرى: إذا كان ملف app.yml نظيفًا، فما الذي قد يمنع سلوك إعادة التوجيه المتوقع؟ هل يمكن أن يكون Cloudflare أو إعداد آخر يتداخل؟

سنكون ممتنين لأي مؤشرات تساعدنا على البحث بشكل أعمق في هذه المشكلة!

إليك دليل.

هل تم تفعيل السحابة البرتقالية لجميع النطاقات القديمة؟ هل يؤدي إيقاف تشغيل السحابة البرتقالية إلى حل المشكلة؟ إذا كان الأمر كذلك، فكما توقعت طوال الوقت، ريتشارد على حق وتحتاج إلى تنظيف إعداداتك.

ولكن إذا كان استخدام Cloudflare يسمح لطرف خبيث (أنت في هذه الحالة) بتقديم موقع شخص آخر على نطاقه، فهذا يبدو مشكلة.

إعجاب واحد (1)

حسنًا، هل يجب أن أقوم بتشغيل

./discourse-setup

بعد تنزيل discourse أم يجب أن ألصق ملف app.yml القديم الخاص بي بعد التنزيل ثم أقوم بتشغيل

./launcher rebuild app

أي مسار يجب أن أسلك؟

إعجاب واحد (1)

لقد قمنا بالفعل بإزالة النطاقات القديمة ولكن نعم، كان لديهم زر برتقالي ممكّن، والمشكلة الآن هي إذا حصل أي شخص على عنوان IP الخاص بخادمنا وسجل هناك مع تمكين خيار الوكيل، فسوف يخدم موقعنا بنطاقهم.

إعجاب واحد (1)

يجب عليك تشغيل discourse-setup للتأكد من أن لديك تثبيتًا قياسيًا بالفعل. إذا قمت بلصق app.yml القديم الخاص بك، فقد يكون لديك شيء بداخله لا ينتمي. ما زلت لست مقتنعًا تمامًا بأن لديك إعدادًا قياسيًا.

ما زلت لست مقتنعًا بأن هذا هو الحال، ولكن إذا كان الأمر كذلك، فلا يمكنك فعل شيء حيال ذلك.

إعجاب واحد (1)

معظم عناوين IP الخاصة بالخوادم في العالم عامة. هذا هو الهدف من نظام IP.

إعجاب واحد (1)

أود حقًا أن أشكركم @pfaffman @RGJ، الآن أصبح الأمر نظيفًا وجيدًا تقريبًا

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

بيانات العلامة التجارية جيدة يمكنني تنزيلها من الخادم القديم ولكن ماذا عن صور المستخدمين وجميع صور الموقع المفقودة أيضًا

الخادم الجديد

الخادم القديم

ملاحظات:

إعجاب واحد (1)

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

إعجاب واحد (1)

بالنظر إلى الصور المفقودة، يبدو أن لها عنوان URL “متداخلاً”، إليك أحدها:

(https://forum.mamapedia.com/user_avatar/forum.mamapedia.com/jakeatgetit/24/5872_2.png)

و @pfaffman كان هذا في الواقع الموقع الرئيسي في إعداد الموقع المتعدد.

نسخ: @Abdelrahman_MoHamed

Hmm. حسنًا، لو كان الموقع الرئيسي، لتوقعت أن يكون هذا المسار هو https://forum.mamapedia.com/user_avatar/forum.mamapedia.com/jakeatgetit/24/5872_2.png، ولكن هذا لا يعمل أيضًا.

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

شكراً @pfaffman ، ما قمت به حتى الآن يبدو أنه يعمل.

لقد دخلت إلى الخادم القديم ونقلت البيانات من /var/discourse/shared/standalone/uploads/default إلى نفس المسار على الخادم الجديد وعادت جميع صور المستخدمين والمشاركات.

المشكلة الجديدة هي أن العلامة التجارية للموقع لا تعمل حتى لو حاولت تحديثها.

إليك تسجيل شاشة لمدة دقيقة واحدة

إعجاب واحد (1)

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