مرحباً بالجميع،
أواجه مشكلة محددة حيث تفشل مقاطع الفيديو التي يزيد حجمها عن 5 ميجابايت في إنشاء معاينات Onebox على مثيل Discourse الخاص بي (تثبيت Docker قياسي)، في حين أن روابط الفيديو نفسها تعمل بشكل مثالي على مواقع Discourse أخرى.
المشكلة:
عندما أنشر رابط فيديو (على سبيل المثال، ملف .webm بحجم 5.1 ميجابايت)، يفشل Onebox. لقد عزلت المشكلة إلى فشل في التفاوض على طلب النطاق (Range request).
نتائج تصحيح الأخطاء من وحدة تحكم Rails:
- اختبار Ruby اليدوي (نجاح): باستخدام
Net::HTTPالقياسي وتعيين رأسRange: bytes=0-10يدوياً، أحصل بنجاح على 206 محتوى جزئي (Partial Content) من الخادم المصدر. - اختبار نظام Discourse (فشل): عندما يحاول Discourse جلب نفس عنوان URL عبر
FinalDestination.new(url).get، فإنه يتلقى 200 موافق (OK) (Net::HTTPOK) بدلاً من 206. ونتيجة لذلك، فإنه يحاول تنزيل الملف بأكمله، ويصل إلى حدMAX_REQUEST_SIZE_BYTESالبالغ 5 ميجابايت، ويفشل Onebox برسالة خطأ “الحجم كبير جداً”.
لقد اختبرت بالفعل التكوينات التالية، لكن المشكلة لا تزال قائمة:
- تعيين سلسلة تشبه المتصفح في
onebox_user_agent. - إضافة النطاق المصدر إلى
force_custom_user_agent_hosts. - التحقق من عدم وجود وكيل (proxy) عام مهيأ على الخادم (
env | grep -i proxyفارغ). - اختبار نفس عنوان URL على مثيلات Discourse أخرى، حيث يتم إنشاء معاينة Onebox له بشكل مثالي.
السؤال:
لماذا يفشل أحد مثيلات Discourse في التفاوض على طلب نطاق (206) بينما ينجح مثيل آخر، يشير إلى عنوان URL نفسه تماماً، في نفس الشبكة؟
هل هناك أي تكوين داخلي محدد، أو برامج وسيطة أمنية، أو منطق FinalDestination قد يقوم بإزالة رؤوس Range أو يتسبب في تراجع الخادم البعيد إلى استجابة 200 كاملة؟
أقدر أي رؤى أو إشارات حول أين يجب أن أبحث بعد ذلك!