كلاود
بنية تحتية

Reverse Proxy: ايش هو وكيف تضبطه

كلاود|٢٦ يناير ٢٠٢٦|4 دقائق قراءة|٥٨٣ مشاهدة
Reverse Proxy: ايش هو وكيف تضبطه

Reverse proxy يحمي سيرفرك ويوزع الحمل. Nginx أو Caddy. نشرح المفهوم والإعداد — مع أمثلة لـ Node.js و Laravel.

ما هو Reverse Proxy؟

Reverse Proxy هو خادم وسيط يقف بين المستخدم وخادم التطبيق الفعلي. بدل ما يتصل المستخدم مباشرة بسيرفر التطبيق، يمر الطلب أولا عبر Reverse Proxy الذي يوجهه للوجهة الصحيحة.

الفرق عن Forward Proxy بسيط: Forward Proxy يحمي المستخدم ويخفي هويته، بينما Reverse Proxy يحمي السيرفر ويخفي بنيته التحتية.

لماذا تحتاج Reverse Proxy؟

1. الأمان

Reverse Proxy يخفي عنوان IP الحقيقي لسيرفر التطبيق. المهاجم يرى عنوان البروكسي فقط، مما يصعب استهداف السيرفر الفعلي. إضافة لذلك، يمكنك تطبيق قواعد WAF وفلترة الطلبات قبل وصولها للتطبيق.

2. توزيع الحمل (Load Balancing)

عندك أكثر من سيرفر يشغل نفس التطبيق؟ Reverse Proxy يوزع الطلبات بينها بالتساوي أو حسب خوارزمية محددة مثل Round Robin أو Least Connections أو IP Hash.

3. التخزين المؤقت (Caching)

Reverse Proxy يحفظ نسخة من الاستجابات المتكررة ويقدمها مباشرة بدون الرجوع لسيرفر التطبيق. هذا يقلل الحمل بشكل كبير على التطبيق ويسرع الاستجابة.

4. إنهاء SSL (SSL Termination)

بدل ما يتعامل كل سيرفر تطبيق مع شهادات SSL، Reverse Proxy يتعامل مع التشفير مركزيا. الاتصال بين البروكسي وسيرفرات التطبيق يكون عبر HTTP عادي داخل الشبكة الخاصة.

الخيارات المتاحة

البرنامج الاستخدام الأنسب الأداء سهولة الإعداد
Nginx مواقع عالية الحركة ممتاز متوسط
Apache بيئات PHP التقليدية جيد سهل
HAProxy توزيع حمل متقدم ممتاز متقدم
Caddy مشاريع صغيرة ومتوسطة جيد سهل جدا
Traefik بيئات Docker وKubernetes جيد متوسط

إعداد Nginx كـ Reverse Proxy

الخطوة 1: تثبيت Nginx

على Ubuntu/Debian:

sudo apt update
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

الخطوة 2: إعداد ملف الموقع

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

sudo nano /etc/nginx/sites-available/myapp

المحتوى الأساسي:

server {
 listen 80;
 server_name example.com;

 location / {
 proxy_pass http://127.0.0.1:3000;
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto $scheme;
 }
}

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

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

الخطوة 4: إضافة SSL مع Let's Encrypt

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com

Certbot يعدل إعدادات Nginx تلقائيا ويضيف شهادة SSL مجانية مع تجديد تلقائي.

إعدادات متقدمة

التخزين المؤقت

proxy_cache_path /var/cache/nginx levels=1:2
 keys_zone=app_cache:10m max_size=1g inactive=60m;

server {
 location / {
 proxy_cache app_cache;
 proxy_cache_valid 200 30m;
 proxy_cache_valid 404 1m;
 proxy_pass http://127.0.0.1:3000;
 }
}

توزيع الحمل

upstream backend {
 least_conn;
 server 10.0.0.1:3000 weight=3;
 server 10.0.0.2:3000 weight=2;
 server 10.0.0.3:3000 backup;
}

server {
 location / {
 proxy_pass http://backend;
 }
}

حماية من هجمات DDoS

limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;

server {
 location /api/ {
 limit_req zone=api burst=20 nodelay;
 proxy_pass http://127.0.0.1:3000;
 }
}

إعداد Reverse Proxy لعدة تطبيقات

سيناريو شائع: سيرفر واحد يشغل عدة تطبيقات على منافذ مختلفة:

server {
 server_name app1.example.com;
 location / {
 proxy_pass http://127.0.0.1:3000;
 }
}

server {
 server_name app2.example.com;
 location / {
 proxy_pass http://127.0.0.1:4000;
 }
}

server {
 server_name api.example.com;
 location / {
 proxy_pass http://127.0.0.1:8080;
 }
}

كل تطبيق يعمل على منفذ مختلف، وNginx يوجه الطلبات حسب النطاق الفرعي.

مراقبة الأداء

بعد الإعداد، راقب الأداء:

  • سجلات الوصول: تحقق من /var/log/nginx/access.log لمعرفة أنماط الطلبات
  • سجلات الأخطاء: راقب /var/log/nginx/error.log لاكتشاف المشاكل
  • حالة الاتصالات: فعل stub_status لمراقبة الاتصالات النشطة
  • زمن الاستجابة: استخدم متغير $upstream_response_time في سجلات الوصول

أخطاء شائعة وحلولها

الخطأ السبب الحل
502 Bad Gateway سيرفر التطبيق متوقف تأكد من تشغيل التطبيق على المنفذ الصحيح
504 Gateway Timeout التطبيق بطيء زد قيمة proxy_read_timeout
WebSocket لا يعمل إعدادات Upgrade ناقصة أضف proxy_set_header Upgrade و Connection
فقدان IP الحقيقي headers ناقصة أضف X-Real-IP و X-Forwarded-For

الخلاصة

Reverse Proxy مكون أساسي في أي بنية تحتية احترافية. يضيف طبقة أمان وأداء وتحكم بين المستخدم وتطبيقك. على سيرفرات كلاود (cloud.net.sa) تحصل على صلاحيات root كاملة لإعداد Nginx أو أي Reverse Proxy تفضله، مع أداء ثابت وزمن استجابة 8ms من الرياض. ابدأ بالإعداد الأساسي ثم أضف الميزات المتقدمة حسب احتياجك.


ابدأ الآن

جاهز تبني بنيتك التحتية؟ اختر خادمك السحابي بالمواصفات اللي تناسبك، أو راجع باقات الاستضافة.

مشاركة