تخصيص سلوك خادم الويب الخاص بـ Discourse باستخدام outlets

ملخص

اعتبارًا من هذا الالتزام، يتضمن تكوين nginx الافتراضي لـ Discourse ما يُعرف بـ “المنافذ” - وهي طريقة مدعومة لإدخال عبارات إضافية في تكوين nginx في أماكن مناسبة.

يمكّن هذا التغيير نهجًا أكثر قوة لإدارة تكوين وسلوك خادم الويب حيث كنا نعتمد سابقًا على أوامر بحث/استبدال هشة نسبيًا.

بمرور الوقت، سنقوم بتكييف قوالب التكوين الخاصة بنا لاستخدام المنافذ.

الاستخدام

هناك ثلاثة أقسام منافذ مدعومة:

  • before-server: عبارات تكوين سياق http
  • server: عبارات تكوين سياق server
  • discourse: عبارات تكوين سياق location - يتم تطبيق هذه على الطلبات المعاد توجيهها إلى Discourse

أمثلة

فيما يلي بعض الأمثلة حول كيفية استخدام هذه المنافذ في ملف تكوين app.yml الخاص بك لتحقيق الأهداف.

يمكن إضافة هذه إلى أي مكان يمكنك فيه استخدام أمر run أو file؛ توصيتي هي القيام بذلك في خطاف after_code حتى يتمكن إعادة البناء من الفشل بسرعة إذا كان هناك خطأ في بناء الجملة.

إضافة رأس استجابة

يضيف هذا المثال رأسًا إلى كل استجابة يتم إعادة توجيهها إلى Discourse:

hooks:
  after_code:
    - file:
        path: /etc/nginx/conf.d/outlets/discourse/clacks-overhead.conf
        chmod: 444
        contents: |
          add_header x-clacks-overhead "GNU Terry Pratchett";

النتيجة:

○ → curl -I https://example.contoso.com/
HTTP/2 200 
…
x-clacks-overhead: GNU Terry Pratchett

إضافة ملف ثابت في مسار واحد

يضيف هذا المثال ملفًا ثابتًا يتم تقديمه بواسطة nginx في مسار واحد، خارج شجرة Discourse العادية.

hooks:
  after_code:
    - file:
        path: /etc/nginx/conf.d/outlets/server/well-known-important-file.conf
        chmod: 444
        contents: |
          location = /.well-known/important-file {
            default_type application/json;
            root /var/www/static/;
          }
    - file:
        path: /var/www/static/.well-known/important-file
        chmod: 444
        contents: |
          {"content-free":true}

النتيجة:

○ → curl -i https://example.contoso.com/.well-known/important-file
HTTP/2 200 
server: nginx
date: Fri, 07 Mar 2025 23:22:38 GMT
content-type: application/json
content-length: 22
last-modified: Fri, 07 Mar 2025 23:12:08 GMT
strict-transport-security: max-age=63072000
accept-ranges: bytes

{"content-free":true}
8 إعجابات

أعتقد أنني متحمس حقًا لهذا، باستثناء… أنا لا أفهمه جيدًا جدًا. هل يعطي المثال الثاني طريقة لتقديم صفحة ثابتة من اختيارنا؟

هذا هو بالضبط.

إنه ليس حلاً قابلاً للتطوير بدرجة كبيرة من حيث إدارة المحتوى، ولكنه يتمتع بميزة سهولة التنفيذ.

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

شكرًا يا مايكل، على الأقل فهمت ما يكفي لمعرفة ما يجري.

[اقتباس=“مايكل براون، المشاركة: 3، الموضوع: 356361، اسم المستخدم: supermathie”]
إنه ليس حلاً قابلاً للتطوير للغاية من حيث إدارة المحتوى، ولكنه يتمتع بميزة سهولة التنفيذ.
[/اقتباس]
جميل، شكرًا على التلميحات