إعادة التوجيه إلى حاوية Discourse مع nginx proxy_pass وروابط من Discourse إلى الخادم المضيف

مرحبًا فريق Discourse،

أقوم بتشغيل خادم nginx على جهاز المضيف الخاص بي، وحاوية Discourse قياسية إلى حد كبير في Docker. بشكل أساسي، لدي عدد قليل من المجلدات المحددة (http) التي يخدمها nginx على المضيف، ويتم توجيه كل شيء آخر إلى حاوية Discourse عبر proxy_pass.

بحسب فهمي للمشكلة، يكفي معرفة أن ملف إعدادات nginx على المضيف يحدد موقعًا /xyz، يتم التعامل معه بواسطة nginx على المضيف، ثم يتم تعريف موقع / ليتم توجيهه عبر proxy_pass إلى حاوية Discourse.

في حالت الاستخدام الخاصة بي، أحتاج إلى نشر روابط كمنشورات في Discourse تشير إلى my.domaiin.com/xyz/some.html، أي أن الروابط داخل Discourse تشير إلى صفحات يخدمها nginx على المضيف.

كان هذا يعمل حتى آخر تحديث لـ Discourse. الآن، عند النقر على الروابط، تنتهي في صفحة “لم يتم العثور على…” الخاصة بـ Discourse. بالمقابل، نسخ أهداف الروابط وفتحها في علامة تبويب جديدة يعمل كما هو متوقع.

لدي فهم جيد جدًا للبروتوكولات منخفضة المستوى، لكن كلما ارتفعنا في طبقات البروتوكول، قلّ فهمي :wink:
الفرضية الحالية هي أن nginx داخل Discourse يحافظ على الاتصال مفتوحًا (keepalive؟)، مما يفوت nginx على المضيف الفرصة لتحليل مسار الطلب الجديد لاختيار الخادم الصحيح. يتم تمرير طلبات الاتصال إلى الحاوية كما هي مع الحفاظ على اتصالها مفتوحًا. ثم يتم الرد على طلب المسار /xyz بواسطة Discourse الذي لا يعرف هذا المجلد.

كيف يجب أن أتعامل مع هذه المشكلة؟ إذا لم يكن هناك حل بسيط، فسيكون من المفيد بالفعل الحصول على بعض التوجيهات، حتى لو كانت وصفًا جيدًا يتعلق بمعرفة بروتوكول HTTP اللائق.

شكرًا!

ملاحظة إضافية: إذا كانت هذه المشكلة تتعلق حقًا بـ keep-alive، فأنا مستعد تمامًا لتعطيل keep-alive وقبول بعض التكلفة الإضافية. فليس الهدف من هذا التثبيت خدمة عدد كبير من المستخدمين.

بعد التفكير، أعتقد أنني بحاجة إلى جعل خادم nginx المضيف يستمع أيضًا إلى أنبوب مسمى، وكشف هذا الأنبوب داخل حاوية Discourse، وإضافة مجلدي المخصص /xyz إلى إعدادات nginx الخاصة بـ Discourse، لتوجيه المرور عبر الأنبوب الذي تم إنشاؤه حديثًا. (بعد حل التفاصيل، مثل ضرورة بدء تشغيل nginx المضيف أولاً، وإلا فلن يقوم docker-compose بكشف الأنبوب المسمى بشكل صحيح)

ومع ذلك، أي مساعدة تُقدّر :wink:

ويرجع ذلك إلى أن موجه Ember.JS يعرف القائمة الكاملة للمسارات التي تدعمها تطبيق Discourse، ويتم عرض صفحة 404 على جانب العميل لأنه يعرف أن الخادم لا يحتوي على محتوى هناك.

ضع ملفاتك على نطاق فرعي آخر.