استخدام Discourse مع Cloudflare: أفضل الممارسات

استخدام Discourse مع Cloudflare

:bookmark: يشرح هذا الدليل كيفية تكوين واستخدام Discourse مع Cloudflare، بما في ذلك أفضل ممارسات الأمان ونصائح استكشاف الأخطاء وإصلاحها.

:person_raising_hand: مستوى المستخدم المطلوب: مسؤول

:information_source: يلزم الوصول إلى وحدة التحكم للتثبيتات المستضافة ذاتيًا

ملخص

يمكن لـ Cloudflare تعزيز مثيل Discourse الخاص بك من خلال تحسين الأداء عبر شبكة توصيل المحتوى (CDN)، وطبقات أمان إضافية مثل الحماية من هجمات DDoS، ودعم HTTPS. يغطي هذا الدليل عملية الإعداد وأفضل الممارسات للتكوين الأمثل.

لماذا استخدام Cloudflare مع Discourse

يوفر استخدام Cloudflare مع مثيل Discourse الخاص بك العديد من الفوائد الرئيسية:

  • الأداء: يمكن لشبكة توصيل المحتوى (CDN) الخاصة بـ Cloudflare تحسين الوصول العالمي إلى الأصول الشائعة، مما يعزز تجربة المستخدم عالميًا (المصدر)
  • الأمان: طبقات حماية إضافية تشمل:

:warning: بالنسبة للتثبيتات المستضافة ذاتيًا، بينما توفر Cloudflare هذه الفوائد، فإنها تضيف تعقيدًا إلى إعدادك.

إعداد Cloudflare

  1. تعرف على أساسيات Cloudflare
  2. اتبع تعليمات الإعداد لتكوين Cloudflare لنطاقك والحصول على فوائد الأمان والأداء والموثوقية

أفضل ممارسات التكوين

إعدادات DNS

  • تأكد من أن سجلات DNS التي تشير إلى مثيل Discourse الخاص بك يتم تمريرها عبر الوكيل (proxied).
  • يمكن الوصول إلى إعدادات DNS على dash.cloudflare.com/?to=/:account/:zone/dns

تكوين SSL/TLS

  • اضبط وضع التشفير على “Full (strict)”.
  • يمكن الوصول إلى إعدادات SSL/TLS على dash.cloudflare.com/?to=/:account/:zone/ssl-tls

:warning: قد يتسبب تكوين SSL/TLS غير الصحيح في حدوث حلقات إعادة توجيه.

تكوين التخزين المؤقت

  • اضبط مستوى التخزين المؤقت على “Standard”.
  • يمكن الوصول إلى إعدادات التخزين المؤقت على dash.cloudflare.com/?to=/:account/:zone/caching/configuration

قواعد الصفحة

أنشئ قواعد الصفحة التالية على dash.cloudflare.com/?to=/:account/:zone/rules:

  • اضبط مستوى التخزين المؤقت على “Bypass” لـ community.example.com/session/*
  • قم بتكوين إعدادات القواعد لتطبيع عناوين URL الواردة.

إعدادات الشبكة

قم بتكوين ما يلي على dash.cloudflare.com/?to=/:account/:zone/network:

تمكين:

  • توافق IPv6
  • تحديد الموقع الجغرافي لـ IP
  • تسجيل أخطاء الشبكة
  • التوجيه البصلي (Onion Routing)

تعطيل:

  • IPv4 الزائف (Pseudo IPv4)
  • تخزين الاستجابة مؤقتًا (Response Buffering)
  • رأس True-Client-IP
  • gRPC

اضبط الحد الأقصى لحجم التحميل وفقًا لسياسة موقعك (يوصى بـ 100 ميجابايت).

إعدادات جدار حماية تطبيقات الويب (WAF)

إذا كانت خطة Cloudflare الخاصة بك تدعم القواعد المُدارة (Managed Rules)، فأنشئ ما يلي:

  1. تجاوز WAF عند إنشاء/تعديل المشاركات:

    (http.request.uri.path eq "/posts(/[0-9]+)?" and http.request.method in {"POST" "PUT"})
    
  2. لمستخدمي إضافة Data Explorer، تجاوز WAF عند الاستعلامات الإدارية:

    (http.request.uri.path contains "/admin/plugins/explorer/queries/" and http.request.method eq "PUT")
    

لكلا القاعدتين:

  • اختر “تجاوز جميع القواعد المتبقية” (Skip all remaining rules)
  • قم بتمكين “تسجيل الطلبات المطابقة” (Log matching requests)

يمكن الوصول إلى إعدادات WAF على dash.cloudflare.com/?to=/:account/:zone/firewall/managed-rules

تحسين المحتوى

قم بتكوين ما يلي على dash.cloudflare.com/?to=/:account/:zone/speed/optimization:

  • قم بتمكين Brotli
  • قم بتعطيل Rocket Loader™
  • قم بتعطيل التصغير التلقائي (Auto Minify)

:warning: غالبًا ما تتلقى Discourse تقارير عن تعطل الموقع بسبب تمكين Rocket Loader™

تكوين إضافي للتثبيتات المستضافة ذاتيًا

لضمان إعادة توجيه عنوان IP بشكل صحيح، أضف ما يلي إلى قسم القوالب في ملف containers/app.yml الخاص بك:

- "templates/cloudflare.template.yml"

ذات الصلة: كيف تقوم بإعداد Cloudflare؟

موارد الدعم

استكشاف الأخطاء وإصلاحها

مشكلات سياسة أمان المحتوى (CSP)

إذا واجهت أخطاء CSP:

  • تحقق من تعطيل Rocket Loader.
  • تحقق من إضافة البرامج النصية بشكل صحيح إلى إعداد الموقع content security policy script src.

وظيفة OneBox

إذا تم حظر OneBox:

  • تحقق مما إذا كان وضع مكافحة الروبوتات الفائقة (Super Bot Fight Mode) ممكّنًا.
  • اضبط إعداد “Automated definitely” إذا تم تعيينه على “Managed” أو “Block”.
  • فكر في إنشاء قاعدة WAF مخصصة لوكيل مستخدم OneBox.
28 إعجابًا

صباح الخير،

شكراً لك على هذا الدليل الذي اتبعته بحذافيره ولكنني أواجه مشكلة، في كل مرة أقوم فيها بتفعيل Cloudflare في وحدة التحكم الخاصة بي، أحصل على خطأ مع CSP الذي يعرض لي (تم رفض تنفيذ البرنامج النصي المضمن لأنه ينتهك توجيه سياسة أمان المحتوى التالي: "script-src) وبعد أن يوضح لي عناوين URL الموجودة في CSP الخاصة بي: (إما الكلمة المفتاحية “unsafe-inline”، أو تجزئة (‘sha256-VCiGKEA…’)، أو قيمة nonce (‘nonce-…’) مطلوبة لتمكين التنفيذ المضمن.

لقد حاولت البحث في كل مكان ولكنني لم أجد حلاً سوى تعطيل الوكيل الذي يحل مشكلتي؟

شكراً.

هل يمكنك التحقق مما إذا كان “Rocket Loader” متوقفًا؟

شيء آخر هو التحقق من إضافة البرامج النصية بشكل مناسب إلى إعداد الموقع content security policy script src.

إذا لم ينجح أي من هذه الحلول، أقترح التواصل مع Cloudflare على https://community.cloudflare.com/t/using-discourse-with-cloudflare-best-practices/602890.

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

شكراً لك @nat و @tcloonan

كان هذا مدرجًا في قائمة مهامي لمدة عام أو عامين، لكنني كنت مترددًا بسبب قدم بعض المواضيع القديمة حول هذا الموضوع :smiley:

هل هناك أي مشاكل أو أشياء خاصة للأشخاص الذين يستخدمون AWS S3 للتخزين وللنسخ الاحتياطي؟ :thinking:

هل ما زلت بحاجة إلى قالب Cloudflare في app.yml لعناوين IP الحقيقية أم أن ذلك قد تغير على مر السنين؟

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

نعم. أنت بحاجة إلى قالب cloudflare. بدونه، سيظهر كل المرور وكأنه قادم من خوادم cloudflare بدلاً من عنوان IP الخاص بمتصفح المستخدم.

لا أرى أنه مذكور في المنشور الأصلي، وهو ما يبدو أنه إغفال صارخ. كيف استنتجت أنك بحاجة إليه؟

إعجابَين (2)

مرحباً! لقد كنت متواجداً منذ عام 2014 (بعض السنوات صامتة في الغالب) ولكني كنت أعمل على ترحيل مجتمعنا منذ عام 2020 باستخدام مستورد مخصص، ونحن نعمل على الإصدار الثاني من المكون الإضافي الداخلي الخاص بنا لإدراج وتمكين bbob كمحرك bbcode في Discourse. يمكنك متابعة تقدمنا هنا: GitHub - RpNation/bbcode: RpNation's Official BBCode Implementation for Discourse

لقد كنت أتعامل مع هذا البرنامج قليلاً الآن. نحن نستخدم Cloudflare، لذلك كنت أعيد البحث في أي مشاكل قد تكون لديه مع discourse، حيث أننا الآن في المرحلة التي يمكنني فيها البدء في القلق بشأن الأشياء الأقل أهمية والتي لا تعتبر معوقات.

@nat هل يمكنك إضافة تعديل حول القالب للحالات المستضافة ذاتيًا!

4 إعجابات

تم، شكراً لكما على لفت انتباهي لهذا الأمر!

4 إعجابات

شكراً جزيلاً! ربما كان هذا هو السبب أيضاً في أن موقعي أصبح فجأة غير متاح. لا بد أنني عبثت بإعدادات Cloudflare أكثر من اللازم.

نظرًا لأن مزود النطاق القديم الخاص بي كان يدعم DNSSec بشكل غير كافٍ وغير صحيح، اضطررت للبحث عن شيء جديد. عندها خطرت Cloudflare ببالي. الخطة المجانية كافية تمامًا بالنسبة لي. من المؤسف أن التعريفات لا تتناسب بشكل معقول مع المتطلبات.

إعجابَين (2)

هل يضيف إلى هذا الموقع؟

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

للدقة فقط، الاستعلام الخاص باستثناء WAF هو:

(http.request.uri.path eq "/posts(/[0-9]+)?" and http.request.method in {"POST" "PUT"})

يمكنك نسخه ولصقه إذا نقرت على Edit expression على اليسار بدلاً من استخدام تحديد النموذج.

لاحظت اليوم عندما قمت بالتحديث وفجأة نصف المنتدى لم يعمل بسبب Auto Minify :weary:

تعديل: لاحظت للتو أن هذه مشاركة ويكي. يا لي من أحمق، لقد قمت بتعديل المنشور الأولي.

3 إعجابات

وضع تشفير SSL/TLS: كامل (صارم). هل ستكون هناك مشكلة إذا لم يتم إغلاقه؟ ألن يتم تعريف SSL تلقائيًا على أي حال؟

لإضافة إلى ذلك، يبدو أن وظيفة OneBox يتم حظرها عندما يكون وضع “Super Bot Fight Mode” قيد التشغيل والإعداد “Definitely automated” مضبوطًا على “Managed” أو “block”..

يمكنك تجاوز هذا عن طريق إعداد قاعدة WAF مخصصة لمعرف مستخدم Onebox، ولكن ربما هناك طريقة أكثر أمانًا للقيام بذلك؟

ذو صلة بـ

قد تحتاج هذه الجزئية إلى صياغة أفضل:

@supermathie اقتراح:

ستحتاج إلى إضافة السطر التالي إلى نهاية قسم القوالب الخاص بك في containers/app.yml.

كما هو موضح في Using Discourse with Cloudflare: Best Practices - #11 by shawa

في أفضل الأحوال، يمكن أيضًا توفير رابط لدليل عام حول القوالب في تكوين الخادم، والذي لم أتمكن من العثور عليه للوهلة الأولى.

أقترح إيقاف روبوتات الذكاء الاصطناعي داخل Cloudflare. يمكن العثور على هذا ضمن الأمان → الروبوتات → حظر روبوتات الذكاء الاصطناعي.

كانت روبوتات الذكاء الاصطناعي تضغط على موقعي بـ 30 ألف إلى 40 ألف مشاهدة للصفحة يوميًا. بعد تشغيل هذا الفلتر، انخفض عدد زيارات روبوتات الذكاء الاصطناعي لدي بشكل كبير.

4 إعجابات

يجب تغيير الكود أعلاه إلى:

 - "templates/cloudflare.template.yml"

شكرا،
Major

إعجابَين (2)

هل هذا صحيح حقًا أن دعم WebSockets يجب تمكينه في Cloudflare؟

لقد عمل بشكل جيد معنا بدونه لسنوات، وبقدر ما تمكنت من العثور على معلومات هنا في المنتدى، فإن Discourse لا يستخدم WebSockets بأي شكل من الأشكال.

لا أفهم ما إذا كان عليّ القيام بذلك

أنت على حق. لا أعتقد أننا نستخدم Websockets.

لقد قمت بإزالته، وقمت أيضًا بتحديث مقتطف القالب من المستخدم أعلاه.

إعجابَين (2)

بينما نحن على ذلك، أعتقد أن إعدادات الشبكة بأكملها غير ذات صلة بـ Discourse:

  • لم يعد من الممكن تعطيل التوافق مع IPv6، وبالطبع لا يعتمد Discourse عليه، ولكنه يمكن أن يعمل بشكل مثالي على نظام IPv4 فقط.
  • يضيف تحديد الموقع الجغرافي لـ IP رأس CF-IPCountry إلى الطلبات، والذي لا يستخدمه Discourse على أي حال. يستخدم ميزته الخاصة (اختياري) MaxMind.
  • يضيف تسجيل أخطاء الشبكة رأس الاستجابة Report-To، والذي يمكن للمتصفحات استخدامه للإبلاغ عن الأخطاء. ومع ذلك، فهو مهمل، وحتى أنه يمكن تمكين الميزة مع جميع خطط Cloudflare، فإن عنصر لوحة التحكم لعرض التقارير فعليًا متاح فقط مع خطة Enterprise. لذلك في هذه الحالة بالنسبة لبعض المتصفحات القديمة قد تكون مجرد تراجع في الخصوصية وزيادة في حمل الشبكة.
  • يعزز توجيه Onion الخصوصية للطلبات الواردة من شبكة Tor. لن يهتم Discourse بذلك أو حتى يعرفه.
  • قد تكون ميزة Pseudo IPv4 مطلوبة إذا كان المضيف يشغل بعض البرامج، مثل التحليلات القديمة أو ما شابه، والتي تدعم عناوين IPv4 فقط. يمكن بعد ذلك تعديل رؤوس الوكيل لـ Cloudflare، مثل Cf-Connecting-IP (أو غيرها، اعتمادًا على ما يقوم بتكوينه) للحصول على عنوان IPv4 فريد تقريبًا، بدلاً من عنوان IPv6 الفعلي للعميل، لتجاوز حقيقة أنه لا يمكن تعطيل دعم IPv6 للطلبات من العميل إلى Cloudflare. مرة أخرى، لن يهتم Discourse. أعني أنه ستكون مشكلة على سبيل المثال لاكتشاف GeoIP، ولكن الميزة معطلة افتراضيًا، ويجب على المسؤولين بالطبع تمكينها فقط، إذا كانت مطلوبة بشكل صارم من قبل أي برنامج يشغلونه، مع قبول الجانب السلبي لعدم وجود عناوين IP حقيقية للعملاء. يمكن أيضًا تكوينه لإضافة رأس جديد بعنوان IPv4 الزائف فقط، ويمكن للتحليلات (أو أي شيء آخر) بعد ذلك إعادة كتابة رؤوس IP للعملاء عند الحاجة، بينما لن تتأثر الطلبات إلى Discourse. في أي حال، لوظائف Discourse بشكل عام، الميزة غير ذات صلة.
  • يضيف رأس True-Client-IP هذا الرأس بالإضافة إلى CF-Connecting-IP و X-Forwarded-For. لا يستخدمه Discourse، كما أن قالب تكوين Discourse يستخدم CF-Connecting-IP بدلاً منه. لذلك ليس له تأثير.
  • لا يستخدم Discourse بروتوكول gRPC، ولكن تمكين Cloudflare لإعادة توجيه طلبات gRPC لا يضر أيضًا، كما هو الحال مع WebSockets. قد تكون كلتا الميزتين مطلوبة للبرامج الأخرى التي تعمل على نفس نطاق Cloudflare.
  • الحد الأقصى لحجم التحميل 100 ميجابايت هو الافتراضي والأدنى. تتطلب أحجام التحميل الأكبر خطط Business أو Enterprise، ولن يتعطل Discourse إذا سمح Cloudflare بتحميلات أكبر.

الشيء الوحيد الذي لست متأكدًا منه هو ما إذا كان يمكن أن يكون له تأثير هو تخزين الاستجابة مؤقتًا. ولا يمكنني الاختبار لأنه ميزة خاصة بخطة Enterprise فقط. ولكني لا أستطيع تخيل أن العميل يهتم بما إذا كانت الحزم يتم بثها من حافة CF فور وصولها، أو إرسالها في دفعة واحدة عند اكتمالها عند الحافة. بالنسبة للبيانات المخزنة مؤقتًا (المخزنة مؤقتًا في Cloudflare أعني)، يتم ذلك دائمًا على أي حال، ولا يسبب مشاكل، على الأقل. تؤثر هذه الميزة فقط على البيانات غير المخزنة مؤقتًا.

لذلك بشكل أساسي، سأقوم بإزالة قسم “إعدادات الشبكة” بأكمله باعتباره شيئًا غير ذي صلة بوظائف Cloudflare، ولكن قد تتطلب البرامج الأخرى إعدادات معينة أو قد يفضلها المسؤولون بطريقة معينة، ويجب أن يعرفوا أن Discourse سيعمل في أي حال.

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