خادم 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