تغيير force_https لا يحدث عنوان URL للصور التي تم تحميلها مما يتسبب في تحذير المحتوى المختلط

لقد قمت للتو بتفعيل force_https على تثبيت Discourse الخاص بي. يتم التعامل مع إنهاء HTTPS عبر وكيل عكسي أمامه. يؤدي تفعيل force_https إلى تحويل معظم الروابط الداخلية في Discourse إلى https، لكن ليس تلك الخاصة بالصور الموجودة مسبقًا، وتحديدًا أيقونات المواقع والشعارات. الآن، يؤدي الوصول إلى موقعي عبر https إلى تحذير محتوى مختلط بسبب تضمين الصور غير المشفرة بـ https.

يمكن جعل الروابط تستخدم https عن طريق إعادة تحميل الصور أو بتنفيذ SiteIconManager.ensure_optimized! من وحدة تحكم Rails، مما يشير إلى أن الرابط مخزن في مكان ما ولا يتم تحديثه عند تغيير force_https.

يجب على Discourse تحديث الروابط الخاصة بالصور المرفوعة (وربما جميع الملفات المرفوعة) عند تبديل force_https. أو الأفضل من ذلك هو عدم تضمين المخطط في تلك الروابط، على الرغم من أنني لا أعرف ما إذا كان ذلك ممكنًا.

إعجابَين (2)

كيف قمت بالتثبيت؟ تم تمكين Force_https بشكل افتراضي منذ فترة طويلة.

3 إعجابات

أقوم ببناء صور Docker (مقسمة إلى web_only و data) باستخدام مستودع discourse_docker، وأقوم بتشغيل هذه الصور في سحابة Kubernetes خلف وكيل يقوم بإنهاء بروتوكول HTTPS. يستمع حاوية Discourse فقط إلى المنفذ 80، ولم قُم بتفعيل قوالب SSL و Let’s Encrypt في ملف تكوين الحاوية. يبدو أن قالب Let’s Encrypt هو ما يُفعّل متغير force_https إلى قيمة true، لذا في إعداداتي لم يكن مفعّلاً بشكل افتراضي.

ليس تمامًا، فهو يُفعّل عند التجهيز، لكن إعداد الموقع الافتراضي هو false.

لقد رأيت أيضًا أشخاصًا يقومون بتعطيل إعداد الموقع أثناء محاولة استكشاف الأخطاء وإصلاحها لأنه يُعرض كإعداد “مُعدّل”.

إعجابَين (2)

تأكد من أن وكيلك يرسل جميع رؤوس (headers) الضرورية المحددة في إعدادات nginx هنا:

على وجه الخصوص، غالبًا ما يتم استبعاد X-Forwarded-Proto افتراضيًا.

3 إعجابات

هذه مشكلة حتى لو كان الوكيل يرسل رأس X-Forwarded-Proto وما إلى ذلك.

تغيير إعداد الموقع force_https لن يحدّث بروتوكول رابط الشعار حتى يتم مسح ذاكرة التخزين المؤقت لـ icon_manager. إضافة force_https إلى الإعدادات الخاضعة للمراقبة لمدير الأيقونات هي على الأرجح الحل الأسهل.

6 إعجابات

صحيح! إذا قمت بتثبيت قياسي، يتم تعيينه تلقائيًا، وهذا هو السبب في أنني اشتبهت في أن هذا ليس تثبيتًا قياسيًا.

أنا متأكد إلى حد كبير أنه في موقع GKE الذي أديره، يتم تعيينه عبر متغير بيئة DISCOURSE_FORCE_HTTPS ويعمل كما هو متوقع. لكن ذلك كان منذ فترة طويلة، لذا قد أكون نسيت شيئًا ما.

5 إعجابات

لقد قمت بفحص إعداد “فرض HTTPS” هذا، وقمت بتفعيله مرة أخرى. وقد نجح الأمر بالنسبة لي.

إعجاب واحد (1)