مرحبًا فريق 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. بالمقابل، نسخ أهداف الروابط وفتحها في علامة تبويب جديدة يعمل كما هو متوقع.
لدي فهم جيد جدًا للبروتوكولات منخفضة المستوى، لكن كلما ارتفعنا في طبقات البروتوكول، قلّ فهمي ![]()
الفرضية الحالية هي أن nginx داخل Discourse يحافظ على الاتصال مفتوحًا (keepalive؟)، مما يفوت nginx على المضيف الفرصة لتحليل مسار الطلب الجديد لاختيار الخادم الصحيح. يتم تمرير طلبات الاتصال إلى الحاوية كما هي مع الحفاظ على اتصالها مفتوحًا. ثم يتم الرد على طلب المسار /xyz بواسطة Discourse الذي لا يعرف هذا المجلد.
كيف يجب أن أتعامل مع هذه المشكلة؟ إذا لم يكن هناك حل بسيط، فسيكون من المفيد بالفعل الحصول على بعض التوجيهات، حتى لو كانت وصفًا جيدًا يتعلق بمعرفة بروتوكول HTTP اللائق.
شكرًا!