How-To Guides

إتقان إعدادات وكيل العكس (Reverse Proxy) في Nginx: دليل عملي

إعداد وكيل العكس هو إحدى أكثر التقنيات الأساسية والقوية في بنية الويب الحديثة. يتيح لك إخفاء التفاصيل الداخلية لخوادمك الخلفية، وإدارة حركة المرور، وتعزيز الأمان. يُعد Nginx، بفضل أدائه العالي واستهلاكه المنخفض للموارد، الحل الأمثل لتنفيذ وكلاء العكس على نطاق واسع. في هذا الدليل، سنستعرض كيفية إعداد Nginx كوكيل عكس، مع تغطية الإعداد الأساسي، والتوجيه المتقدم، والترويسات الأمنية الأساسية.

فهم الأساسيات

يقع وكيل العكس بين العميل والخادم الأصلي. عندما يطلب العميل بيانات من نطاقك، يتم توجيه الطلب عبر الوكيل، الذي يقوم بدوره بتحويله إلى الخدمة الخلفية المناسبة. يتيح هذا التجريد تحقيق التوازن في الحمل، وإنهاء شهادات SSL، والتخزين المؤقت دون كشف البنية التحتية الداخلية الخاصة بك.

للبدء، تأكد من تثبيت Nginx على خادمك. بالنسبة لأنظمة Debian/Ubuntu، يمكنك تثبيته باستخدام الأمر التالي:

sudo apt update
sudo apt install nginx

إعداد وكيل العكس الأساسي

يكمن جوهر إعداد وكيل العكس في أمر `proxy_pass`. لنفترض أن تطبيقك الخلفي يعمل على `localhost:3000`. نريد تقديمه عبر HTTP على المنفذ 80.

افتح ملف إعدادات Nginx الافتراضي:

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

استبدل كتلة الخادم الافتراضية بما يلي:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
    }
}

يقوم هذا الإعداد بتحويل جميع حركة المرور من `example.com` إلى تطبيقك المحلي. تضمن أوامر `proxy_set_header` أن يتلقى خادمك الخلفي معلومات دقيقة عن العميل، وهو أمر بالغ الأهمية للتسجيل (Logging) والأمان.

معالجة WebSockets والاتصالات طويلة الأمد

تعتمد العديد من التطبيقات الحديثة على WebSockets لتبادل البيانات في الوقت الفعلي. يدعم Nginx هذا الميزة بشكل أصلي، لكنه يتطلب ترويسات محددة لترقية الاتصال من HTTP إلى WebSocket. السطران `proxy_set_header Upgrade $http_upgrade;` و `proxy_set_header Connection 'upgrade';` في المثال السابق يتعاملان مع هذا تلقائياً. إذا كان تطبيقك يستخدم اتصالات HTTP طويلة الأمد، فقد ترغب أيضاً في زيادة قيم المهلة الزمنية (Timeouts):

proxy_read_timeout 60s;
proxy_send_timeout 60s;

التوازن في الحمل عبر عدة خوادم خلفية

من أعظم مزايا وكيل العكس هو التوازن في الحمل. يمكن لـ Nginx توزيع حركة المرور عبر عدة خوادم صاعدة (Upstream). عرّف كتلة upstream في قسم `http` من إعدادات Nginx الخاصة بك (مثلاً، `/etc/nginx/nginx.conf`):

http {
    upstream my_app {
        server 192.168.1.10:3000;
        server 192.168.1.11:3000;
        server 192.168.1.12:3000;
    }
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://my_app;
    }
}

بشكل افتراضي، يستخدم Nginx خوارزمية الدوران (Round-Robin). يمكنك تحديد طرق أخرى مثل `least_conn` أو `ip_hash` داخل كتلة `upstream` لتناسب أنماط حركة المرور الخاصة بك.

الأمان و HTTPS

قدم دائماً وكيل العكس الخاص بك عبر HTTPS. استخدم Let’s Encrypt للحصول على شهادة مجانية وقم بإعداد Nginx لإعادة توجيه حركة مرور HTTP إلى HTTPS:

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://localhost:3000;
        # ... إعدادات وكيل أخرى ...
    }
}

بالإضافة إلى ذلك، أضف ترويسات أمنية إلى استجابتك للتخفيف من الثغرات الشائعة:

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";

اختبار الإعداد وإعادة تحميله

قبل تطبيق التغييرات، اختبر دائماً إعداداتك لتجنب أخطاء الصياغة التي قد تؤدي إلى توقف خدمتك:

sudo nginx -t
sudo systemctl reload nginx

الخاتمة

إعداد Nginx كوكيل عكس هو مهارة حاسمة لأي مطور أو مسؤول أنظمة. يوفر طبقة قوية لإدارة حركة المرور، وحماية تطبيقاتك، وتوسيع نطاق بنيتك التحتية. من خلال اتباع الخطوات الموضحة أعلاه، يمكنك إعداد وكيل عكس موثوق وفعال يشكل العمود الفقري لبنية الويب الخاصة بك. تذكر مراقبة سجلاتك وضبط إعدادات المهلة الزمنية والتخزين المؤقت (Buffering) بناءً على سلوك تطبيقك المحدد للحصول على أداء مثالي.

Share: