لكي أسمح للمستخدمين الخاصين بي باستضافة مقاطع الفيديو وملفات الصوت وما إلى ذلك التي يقومون بتضمينها في منشورات Discourse، قمت بإعداد خادم Apache يعمل بجانب Nginx الذي يشغل Discourse. يعمل خادم Apache على المنفذ 8008 لـ http: والمنفذ 591 لـ https: (منافذ IANA المحجوزة لـ http-alt). يعمل هذا بشكل جيد ويمكن الوصول إلى المحتوى الموجود على الخادم من المتصفحات عن طريق تحديد رقم المنفذ في عنوان URL، على سبيل المثال:
https://scanalyst.fourmilab.ch:591/video/f9_from_drone_ship_2022-10-12.mp4
ولكن إذا حاولت تضمين عنوان URL هذا في منشور Discourse، فإنه يفشل مع:
عذرًا، لم نتمكن من إنشاء معاينة لصفحة الويب هذه، لأن الخادم ‘scanalyst.fourmilab.ch’ لم يتم العثور عليه. بدلاً من المعاينة، سيظهر رابط فقط في منشورك.
إذا قمت بتشغيل tcpdump ومراقبة حركة مرور DNS، فأرى لا شيء يتم إرساله عندما يرفض عنوان URL هذا. إنه يرفضه دون إجراء استعلام DNS على الإطلاق. إذا قمت بتغيير رقم المنفذ في عنوان URL إلى 443، وهو الافتراضي لـ https:، فإنه يقوم باستعلام DNS بشكل طبيعي ولكن المعاينة تفشل، بالطبع، لأن خادم Apache لا يستمع على هذا المنفذ وخادم Discourse لا يعرف ماذا يفعل بعنوان URL. لم أر شيئًا في وثائق Discourse يشير إلى أن عناوين URL للتضمين قد لا تحدد رقم منفذ.
بالنظر إلى الكود المصدري، وجدت اختبارًا في الدالة validate_uri_format في السطر 362 من lib/final_destination.rb والذي يقرأ:
return false if @uri.scheme == 'https' && @uri.port != 443
والذي يبدو أنه يرفض عنوان URL https: الذي يستخدم منفذًا غير 443. بدا هذا يفسر ما كنت أراه، لذلك علقت هذا السطر، لكنه لم يحدث أي فرق على الإطلاق، حتى بعد إعادة تشغيل Discourse. عندما يظهر المنشور على الموقع مع تحويل التضمين إلى رابط نصي، فإن النقر على الرابط النصي يعرض الفيديو بشكل صحيح، لذا فإن المشكلة الوحيدة هي الفشل في التعرف عليه كتضمين ولفه حول المشغل المضمن.
أسئلتي في هذه المرحلة هي:
- هل من المفترض أن تعمل أرقام المنافذ غير القياسية على عناوين URL للتضمينات في منشورات Discourse؟
- إذا كان الأمر كذلك، فما الذي يتسبب في رفض عناوين URL هذه؟
- هل هناك أي طريقة لجعلها تعمل؟
كان هناك مناقشة هنا في مارس 2017 حول هذه المشكلة في هذين المنشورين:
- تحديد منفذ للمضيف القابل للتضمين مع إعطاء عنوان IP يؤدي إلى خطأ
- FIX: السماح بالمنافذ لعناوين IP للمضيفين القابلين للتضمين #4759 (على GitHub)
والتي أشارت إلى أنه تم إصلاح المشكلة، لكنها لا تعمل اليوم على 2.9.0.beta10.
شكرًا لأي رؤى و/أو مساعدة في هذا الشأن.