← العودة للمدونة

كيفية تكوين Apache كـ Reverse Proxy

خادم Apache HTTP هو أحد أقدم وأشهر خوادم الويب في العالم. على الرغم من صعود Nginx، لا يزال Apache يتمتع بشعبية هائلة بفضل مرونته ووحداته (Modules) القوية. إحدى أهم هذه الميزات هي استخدامه كـ Reverse Proxy، حيث يستقبل طلبات المستخدمين ويمررها إلى خوادم خلفية (مثل تطبيق Node.js أو Python) ويعيد الرد للمستخدم.

الخطوة 1: تفعيل الوحدات المطلوبة

لتحويل Apache إلى بروكسي، يجب تفعيل بعض الوحدات التي لا تكون مفعلة افتراضياً. على نظام Ubuntu/Debian، استخدم الأوامر التالية:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests

ثم أعد تشغيل Apache لتطبيق التغييرات:

sudo systemctl restart apache2

الخطوة 2: إعداد Virtual Host

الآن سنقوم بإنشاء ملف إعداد لموقعك. لنفترض أنك تريد توجيه الطلبات القادمة إلى myapp.com إلى تطبيق يعمل محلياً على المنفذ 3000.

أنشئ ملف الإعداد:

sudo nano /etc/apache2/sites-available/myapp.conf

أضف المحتوى التالي:

<VirtualHost *:80>
    ServerName myapp.com
    ServerAdmin webmaster@localhost

    # إعدادات البروكسي
    ProxyPreserveHost On
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/

    # ملفات السجلات (اختياري لكن مفيد)
    ErrorLog ${APACHE_LOG_DIR}/myapp_error.log
    CustomLog ${APACHE_LOG_DIR}/myapp_access.log combined
</VirtualHost>

ماذا تعني هذه الأسطر؟

  • ProxyPreserveHost On: يخبر Apache بتمرير رأس الـ Host الأصلي إلى التطبيق الخلفي (مهم جداً للتوجيه الصحيح).
  • ProxyPass: يوجه كل الطلبات من / إلى http://localhost:3000/.
  • ProxyPassReverse: يعدل الترويسات في ردود الخادم الخلفي لضمان بقاء المستخدم على نفس النطاق.

الخطوة 3: تفعيل الموقع

الآن قم بتفعيل ملف الإعداد الذي أنشأته:

sudo a2ensite myapp.conf
sudo systemctl reload apache2

دعم WebSocket (مهم لـ MasarWeb)

إذا كان تطبيقك يستخدم WebSockets (مثل تطبيقنا هنا)، ستحتاج لتفعيل وحدة إضافية تسمى proxy_wstunnel:

sudo a2enmod proxy_wstunnel
sudo systemctl restart apache2

ثم أضف سطراً إضافياً في ملف الإعداد قبل ProxyPass /:

ProxyPass /ws ws://localhost:3000/ws