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 من الرياض. ابدأ بالإعداد الأساسي ثم أضف الميزات المتقدمة حسب احتياجك.
ابدأ الآن
جاهز تبني بنيتك التحتية؟ اختر خادمك السحابي بالمواصفات اللي تناسبك، أو راجع باقات الاستضافة.


