Skip to content
VDS · المواقع وخوادم الويب

الوكيل العكسي: تطبيقات متعددة على عنوان واحد

كيف تتشارك عدة تطبيقات عنوان VDS عامًا واحدًا عبر النطاقات والمسارات، وتمرّر الترويسات بشكل صحيح، ولا تكسر WebSocket.

آخر تحديث 23 أغسطس 2026

يحتوي الخادم عادةً على عنوان IPv4 عام واحد، لكنه يشغّل عدة تطبيقات. يستقبل الوكيل العكسي جميع الطلبات على المنفذين 80 و443 ويوجّهها إلى الخدمات الداخلية حسب اسم النطاق أو المسار. كما يحتفظ بالشهادة الوحيدة والسجلات المشتركة.

التخطيط

يستمع كل تطبيق إلى منفذه المحلي الخاص وعلى 127.0.0.1 فقط:

  • موقع الواجهة الأمامية — 127.0.0.1:3000؛
  • واجهة API — 127.0.0.1:8000؛
  • لوحة المراقبة — 127.0.0.1:9090.

لا يُكشف للخارج سوى Nginx. للتحقق من أن تطبيقًا ما غير مكشوف مباشرةً:

ss -tulpn | grep LISTEN

تعني أسطر مثل 0.0.0.0:3000 أن الخدمة يمكن الوصول إليها من الإنترنت، متجاوزةً الوكيل وبدون تشفير.

حسب النطاق

server {
    listen 80;
    server_name app.example.ru;
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        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;
    }
}

server {
    listen 80;
    server_name api.example.ru;
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

بدون X-Forwarded-For، يرى التطبيق كل طلب قادمًا من 127.0.0.1، وتتوقف أي قيود تعتمد على عنوان IP عن العمل.

حسب المسار

location /api/ {
    proxy_pass http://127.0.0.1:8000/;
}

الشرطة المائلة في نهاية proxy_pass مهمة هنا: معها تُزال البادئة /api ويستقبل التطبيق /users؛ وبدونها يستقبل /api/users. نصف حالات «404 الغامضة» على الوكيل تأتي من هذا بالضبط.

WebSocket والاستجابات الطويلة

location /ws/ {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 3600s;
}

بدون زوج Upgrade/Connection ينقطع الاتصال مباشرةً بعد المصافحة؛ وبدون زيادة المهلة ينقطع بعد دقيقة من الصمت.

الأخطاء الشائعة

العَرَضالسبب
502 Bad Gatewayالتطبيق لا يعمل أو يستمع إلى منفذ مختلف
504 Gateway Time-outيستغرق التطبيق وقتًا أطول للاستجابة من proxy_read_timeout
إعادة توجيه لا نهائيةالتطبيق لا يعرف بـ HTTPS — مرّر X-Forwarded-Proto
تعطّل رفع الملفاتclient_max_body_size صغير جدًا؛ القيمة الافتراضية 1 MB
ظهور عنوان IP نفسه في سجلات التطبيقلم يُمرَّر X-Forwarded-For

التالي: مواقع متعددة، الشهادة، Caddy مع HTTPS تلقائي.

شهادة واحدة على الوكيل تغطي جميع التطبيقات خلفه. لا تحتاج الاتصالات الداخلية عبر 127.0.0.1 إلى تشفير — فهي لا تغادر الخادم أبدًا.