مرحباً،
أواجه مشكلة غريبة في منصة Discourse حيث تحدث أخطاء 502 فقط لحساب مستخدم واحد محدد (المسؤول) بعد تسجيل الدخول، بينما:
-
يمكن للمستخدمين المجهولين الوصول إلى الموقع بشكل طبيعي
-
يمكن لحسابات المستخدمين الأخرى تسجيل الدخول واستخدام الموقع بشكل طبيعي
-
المشكلة تظهر فقط لـ حساب واحد محدد (حساب المسؤول)
البيئة (Environment)
-
تم تثبيت Discourse عبر إعداد Docker الرسمي
-
وكيل عكسي / شبكة توصيل المحتوى (CDN): ArvanCloud (مشابه لـ Cloudflare)
-
الوصول إلى الإنترنت الدولي مقيد / غير مستقر (GitHub وبعض الخدمات الخارجية غير قابلة للوصول)
-
لم يتم تحديث Discourse منذ حوالي شهر
الأعراض
عند الوصول إلى الموقع:
-
إذا فتحت الموقع في وضع التصفح الخاص/المتخفي ← يتم تحميل الموقع بشكل جيد
-
إذا قمت بتسجيل الدخول باستخدام حسابي الرئيسي ← أحصل فوراً على 502 Bad Gateway
-
إذا قمت بتسجيل الدخول باستخدام حساب آخر ← كل شيء يعمل بشكل جيد
لذا، المشكلة واضحة أنها خاصة بالمستخدم ويتم تشغيلها بعد المصادقة.
سجلات أخطاء شبكة توصيل المحتوى (ArvanCloud)
يظهر خطآن رئيسيان:
1. مهلة الاتصال بالمنبع أثناء القراءة (Upstream timeout while reading upstream)
upstream timed out (110: Connection timed out) while reading upstream
عناوين URL المتأثرة هي في الغالب أصول (assets)، على سبيل المثال:
-
/assets/browser-detect-*.js
-
/assets/plugins/automation-*.js
-
/assets/plugins/discourse-gamification-*.js
-
/assets/plugins/discourse-lazy-videos-*.js
2. إغلاق الاتصال بالمنبع قبل الأوان (Upstream prematurely closed connection)
upstream prematurely closed connection while reading response header from upstream
على سبيل المثال:
-
/stylesheets/common_theme_rtl_*.css
-
/theme-javascripts/*.js
لذا، تنتظر شبكة توصيل المحتوى (CDN) استجابة من Discourse ولكن الواجهة الخلفية تنتهي مهلتها أو تغلق الاتصال.
ما وجدته في الواجهة الخلفية (Backend)
في تتبعات مكدس Rails، يشير مسار الخطأ إلى:
-
current_user_serializer.rb -
discourse_updates.rb -
الدالة:
DiscourseUpdates.has_unseen_features?
مما يشير إلى أن الانهيار/انتهاء المهلة يحدث أثناء التحقق من إعلانات الميزات الجديدة للمستخدمين الذين قاموا بتسجيل الدخول.
بما أن مستخدماً واحداً فقط هو المتأثر، فهذا يشير بقوة إلى أن المشكلة يتم تشغيلها أثناء تسلسل خاص بالمستخدم، وليس أثناء عرض الموقع العام.
أقدر أي توجيه.
شكراً جزيلاً.