كيفية تثبيت Discourse خلف Apache mod_proxy؟

مرحبًا بالجميع.

أحاول إعداد Discourse في حاوية Docker. بيئة المضيف (Debian) تشغل خادم Apache httpd (لا يمكنني تشغيل nginx لأنني أستضيف مواقع أخرى على Apache). أريد استخدام mod_proxy لعمل عكسي (reverse-proxy) إلى الحاوية، والتي تستمع على المنفذ 3000.

إليك تكوين Apache الحالي لهذا الـ vhost:

<VirtualHost *:80>
  ServerAdmin webmaster@example.com
  ServerName example.com
  ServerAlias www.example.com

  ErrorLog ${APACHE_LOG_DIR}/vhosts/example.com/error.log
  CustomLog ${APACHE_LOG_DIR}/vhosts/example.com/access.log combined

  <IfModule proxy_module>
  ## <https://meta.discourse.org/t/running-other-websites-on-the-same-machine-as-discourse/17247>
    ProxyPreserveHost on
    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
    RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
  </IfModule>
</VirtualHost>

بدأت فقط بتعليمات ProxyPass و ProxyPassReverse، ثم أضفت ProxyPreserveHost وتعليمات RequestHeader واحدة تلو الأخرى. بغض النظر عن كيفية تكوين الوكيل باستخدام هذه التعليمات، فإن بعض الملفات الموجودة تحت جذر المستند تعيد خطأ 404 عند الوصول إليها (مثل الملفات الموجودة في /images و /assets).

لاحظ التعليق الذي يحتوي على عنوان URL الخاص بـ Discourse Meta والذي قمت بتحويله من صيغة nginx إلى Apache.

أي أفكار حول كيفية جعل هذا يعمل ستكون موضع تقدير كبير!

شاهد Set up Discourse on a server with existing Apache sites

إذن الحل الذي تقترحه هو تشغيل Discourse خلف HAProxy ثم خلف Apache؟

كما قلت، يجب أن أستخدم Apache في المقدمة لأنني أستضيف مواقع افتراضية أخرى على هذه الخادم.

لماذا لا نستخدم nginx؟ لست متأكداً من الأداء في discourse مع apache.

لا أملك الوقت أو الموارد للتبديل إلى Nginx في الوقت الحالي.

ولتوضيح الأمر، سيعمل Discourse نفسه على Nginx، لكنه يحتاج إلى أن يُوجَّه عبر بروكسي Apache.

لقد قمت بمزيد من البحث في هذا الأمر، وأعتقد أنني أستطيع تحقيق ما أهدف إليه، حيث يبدو أن HAProxy قادر على اختيار خوادم الخلفية بناءً على اسم النطاق الافتراضي (vhost).

عذرًا. لقد قمت بالبحث الخاطئ. ربما يمكنك المحاولة مرة أخرى والعثور على دليل howto لـ Apache.

HAProxy يقوم بما أريده ويبدو أداة مصقولة ومفيدة جدًا. شكرًا على التوجيه.

ومع ذلك، يبدو أن المشكلة كانت في تعديل قوالب web*.yml للاستماع إلى منافذ غير الافتراضية 80 و443. قمت باستعادة الإعدادات الافتراضية ثم عدّلت containser/app.yml لإضافة أسطر مشابهة لما يلي، فاختفت أخطاء 404:

expose:
  - "127.0.0.1:1234:80"    # http

لقد كنت سعيدًا جدًا بـ traefik مؤخرًا، وهو يقوم تلقائيًا بشهادات Let’s Encrypt (يمكنك فعل ذلك أيضًا مع HA-Proxy، لكنه يتطلب جهدًا أكبر قليلاً).

سعيد لأنك تمكنت من حل المشكلة!