لقد قمت للتو بتفعيل force_https على تثبيت Discourse الخاص بي. يتم التعامل مع إنهاء HTTPS عبر وكيل عكسي أمامه. يؤدي تفعيل force_https إلى تحويل معظم الروابط الداخلية في Discourse إلى https، لكن ليس تلك الخاصة بالصور الموجودة مسبقًا، وتحديدًا أيقونات المواقع والشعارات. الآن، يؤدي الوصول إلى موقعي عبر https إلى تحذير محتوى مختلط بسبب تضمين الصور غير المشفرة بـ https.
يمكن جعل الروابط تستخدم https عن طريق إعادة تحميل الصور أو بتنفيذ SiteIconManager.ensure_optimized! من وحدة تحكم Rails، مما يشير إلى أن الرابط مخزن في مكان ما ولا يتم تحديثه عند تغيير force_https.
يجب على Discourse تحديث الروابط الخاصة بالصور المرفوعة (وربما جميع الملفات المرفوعة) عند تبديل force_https. أو الأفضل من ذلك هو عدم تضمين المخطط في تلك الروابط، على الرغم من أنني لا أعرف ما إذا كان ذلك ممكنًا.
أقوم ببناء صور Docker (مقسمة إلى web_only و data) باستخدام مستودع discourse_docker، وأقوم بتشغيل هذه الصور في سحابة Kubernetes خلف وكيل يقوم بإنهاء بروتوكول HTTPS. يستمع حاوية Discourse فقط إلى المنفذ 80، ولم قُم بتفعيل قوالب SSL و Let’s Encrypt في ملف تكوين الحاوية. يبدو أن قالب Let’s Encrypt هو ما يُفعّل متغير force_https إلى قيمة true، لذا في إعداداتي لم يكن مفعّلاً بشكل افتراضي.
هذه مشكلة حتى لو كان الوكيل يرسل رأس X-Forwarded-Proto وما إلى ذلك.
تغيير إعداد الموقع force_https لن يحدّث بروتوكول رابط الشعار حتى يتم مسح ذاكرة التخزين المؤقت لـ icon_manager. إضافة force_https إلى الإعدادات الخاضعة للمراقبة لمدير الأيقونات هي على الأرجح الحل الأسهل.
صحيح! إذا قمت بتثبيت قياسي، يتم تعيينه تلقائيًا، وهذا هو السبب في أنني اشتبهت في أن هذا ليس تثبيتًا قياسيًا.
أنا متأكد إلى حد كبير أنه في موقع GKE الذي أديره، يتم تعيينه عبر متغير بيئة DISCOURSE_FORCE_HTTPS ويعمل كما هو متوقع. لكن ذلك كان منذ فترة طويلة، لذا قد أكون نسيت شيئًا ما.