بيان رسمي من Discourse حول إعدادات المجلد الفرعي
نحن ندعم إعدادات المجلدات الفرعية لعملائنا على مستوى المؤسسات وما فوق. نظرًا للتعقيد التقني الكبير في الإعداد، نوصي بشدة بعدم استخدام هذا الإعداد ما لم تكن خبيرًا جدًا في إعدادات المجلدات الفرعية المخصصة.
من الضروري أن يكون لديك فهم عميق لـ
- إعداد NGINX في حاوية Docker الخاصة بـ Discourse
- تأمين إعادة توجيه IP الأصلي باستخدام رؤوس مخصصة في سلسلة الوكيل (proxy chain)
- تحديد المعدل (Rate limiting) في خادم الوكيل الأمامي (proxy server)
إذا بدا كل هذا غريبًا وغير مألوف بالنسبة لك فإننا نوصي بشدة بتجنب هذا الإعداد.
لتقديم Discourse من مجلد فرعي (المعروف أيضًا باسم بادئة المسار) على نطاقك، مثل https://www.example.com/=SUBFOLDER=, إليك كيفية القيام بذلك!
إعداد Docker
في قسم env الخاص بملف yml الخاص بحاوية Docker، أضف إعداد DISCOURSE_RELATIVE_URL_ROOT مع المجلد الفرعي الذي تريد استخدامه. تأكد من أنه لا ينتهي بـ /.
سيؤدي تحرير هذا إلى تحديث الدليل بأكمله.
env:
...
DISCOURSE_RELATIVE_URL_ROOT: /=SUBFOLDER=
يحتاج قسم run إلى بعض التغييرات لتوجيه جميع مسارات Discourse إلى المكان الصحيح. إليك قسم run كامل مع دعم المجلد الفرعي:
run:
- exec:
cd: $home
cmd:
- mkdir -p public/=SUBFOLDER=
- cd public/=SUBFOLDER= && ln -s ../uploads && ln -s ../backups
- replace:
global: true
filename: /etc/nginx/conf.d/discourse.conf
from: proxy_pass http://discourse;
to: |
rewrite ^/(.*)$ /=SUBFOLDER=/$1 break;
proxy_pass http://discourse;
- replace:
filename: /etc/nginx/conf.d/discourse.conf
from: etag off;
to: |
etag off;
location /=SUBFOLDER= {
rewrite ^/=SUBFOLDER=/?(.*)$ /$1;
}
- replace:
filename: /etc/nginx/conf.d/discourse.conf
from: $proxy_add_x_forwarded_for
to: $http_your_original_ip_header
global: true
يشير $http_your_original_ip_header إلى Your-Original-Ip-Header، وهو رأس موثوق به تقوم بتعيينه على المصدر يحتوي على عنوان IP الفعلي للعميل.
هذا مطلوب لأن حركة المرور تمر عبر وكيل مركزي، إذا كان لـ Discourse عنوان IP عام، يمكنك تزييفه. إذا كان Discourse خاصًا، فقد تتمكن من الاستغناء عن X-Forwarded-For
بعد إجراء هذه التغييرات، قم بتهيئة حاوية Docker الخاصة بك كالمعتاد، أو أعد البناء إذا كنت تقوم بتغيير حاوية موجودة.
./launcher bootstrap app
أو
./launcher rebuild app
مرفق ملف yml كامل كمثال لحاوية قائمة بذاتها.
subfolder-sample.yml (3.1 KB)
مخاوف تحديد المعدل (Rate limiting concerns)
إذا كنت ستعتمد هذا الإعداد، فمن المحتمل أن ترغب في تحديد معدل الطلبات قبل وصولها إلى NGINX في الحاوية، وهذا يعني أنك من المحتمل أن تتجنب استخدام قالب تحديد المعدل الخاص بنا. من الصعب جدًا تكوين NGINX في الحاوية للتقييد على عنوان IP مُعاد تعيينه وسيتطلب تغييرات معقدة على القالب.
المنشورات الحالية
إذا قمت بذلك باستخدام موقع موجود كان على نطاق فرعي، فستجد أن عمليات التحميل الخاصة بك معطلة. توجد أداة يمكن أن تساعد في إصلاح جميع المسارات لتشمل المجلد الفرعي. أولاً، ادخل إلى حاوية Docker وانتقل إلى دليل Discourse:
cd /var/discourse
./launcher enter app
cd /var/www/discourse
ثم قم بتشغيل أمر إعادة التعيين بعد عمل نسخة احتياطية:
RAILS_ENV=production bundle exec script/discourse remap '/uploads' '/=SUBFOLDER=/uploads'
انظر أيضًا: Use a subfolder (path prefix) to serve Discourse with multiple servers sharing a domain للحصول على إعدادات أكثر غرابة.
robots.txt
الآن بعد أن أصبح Discourse يعمل على مجلد فرعي، لا يمكنه تقديم ملف robots.txt الخاص به للتحكم في المسارات التي تزحف إليها برامج الزحف على الويب. ستبحث برامج الزحف في ملف robots.txt الخاص بموقعك الرئيسي (https://www.example.com/robots.txt). تحتاج إلى نسخ محتويات ملف robots.txt الخاص بـ Discourse (الموجود على https://www.example.com/=SUBFOLDER=/robots.txt) ووضعه في ملف robots.txt الخاص بموقعك الرئيسي.