How-To Guides

إتقان Nginx: دليل شامل لتكوين عكس الوكيل

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

سيأخذك هذا الدليل خلال عملية إعداد Nginx كعكس وكيل، تغطية التكوين الأساسي، تكامل SSL، واستراتيجيات موازنة الحمل.

فهم مفهوم عكس الوكيل

يقع عكس الوكيل بين العملاء وخوادم الواجهة الخلفية. عندما يطلب العميل موردًا، يقوم عكس الوكيل باعتراض الطلب وإحالته إلى خادم الواجهة الخلفية المناسب. يدرك العميل أن الاستجابة تأتي مباشرة من الوكيل، مما يخفي البنية الداخلية لشبكتك. يوفر هذا الإعداد عدة فوائد حاسمة:

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

المتطلبات المسبقة

قبل الغوص في التكوين، تأكد من امتلاكك لما يلي:

  1. خادم يعمل بتوزيع Linux (أمثلة Ubuntu أو CentOS أدناه).
  2. تم تثبيت Nginx وتشغيله.
  3. تطبيق خلفية يعمل على منفذ محلي (على سبيل المثال، localhost:3000 لتطبيق Node.js أو localhost:8080 لتطبيق Java Spring Boot).
  4. اسم نطاق يشير إلى عنوان IP الخاص بخادمك.

تكوين عكس الوكيل الأساسي

جوهر تكوين عكس الوكيل لـ Nginx يكمن في التوجيه proxy_pass. لنفترض أن لديك تطبيق Node.js يعمل على المنفذ 3000. إليك كيفية تكوين Nginx لإعادة توجيه جميع طلبات HTTP إلى هذا التطبيق.

قم بتحرير ملف تكوين كتلة خادم Nginx الخاص بك، والذي يوجد عادةً في /etc/nginx/sites-available/your_domain أو /etc/nginx/conf.d/default.conf.

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        # Proxy the request to the Node.js application
        proxy_pass http://localhost:3000;
        
        # Required headers for proper proxying
        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-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # Cache control (optional)
        proxy_cache_bypass $http_upgrade;
    }
}

شرح التوجيهات الرئيسية:

  • proxy_pass: يحدد عنوان URL لخادم الواجهة الخلفية.
  • proxy_set_header Host: يعيد توجيه رأس Host الأصلي إلى الواجهة الخلفية، مما يضمن عمل النطاقات الافتراضية بشكل صحيح.
  • proxy_set_header X-Real-IP: يمرر عنوان IP الحقيقي للعميل إلى خادم الواجهة الخلفية.
  • proxy_http_version: يرقّي إلى HTTP/1.1، وهو مطلوب لميزات مثل WebSockets.

إضافة SSL باستخدام Let's Encrypt

في بيئة الويب اليوم، يعد HTTPS إلزاميًا. باستخدام certbot، يمكنك بسهولة الحصول على شهادات SSL وتكوينها لعكس الوكيل الخاص بـ Nginx.

sudo certbot --nginx -d example.com -d www.example.com

سيقوم Certbot بتعديل تكوين Nginx الخاص بك تلقائيًا للاستماع على المنفذ 443 وإعادة توجيه حركة مرور HTTP إلى HTTPS. سيبدو التكوين الناتج مشابهًا للكتلة الأساسية ولكن مع تمكين شهادات SSL ورؤوس HSTS.

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

أحد أقوى ميزات Nginx هي قدرته على توزيع حركة المرور عبر خوادم متعددة. لتحقيق ذلك، حدد كتلة upstream في ملف تكوين Nginx الرئيسي (/etc/nginx/nginx.conf).

upstream my_app {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://my_app;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

من خلال توجيه proxy_pass إلى مجموعة upstream my_app، سيستخدم Nginx خوارزميته الافتراضية لتوزيع الطلبات الواردة بالتساوي بين المثيلات الخلفية الثلاثة.

الخاتمة

يُعد تكوين Nginx كعكس وكيل خطوة قوية نحو بناء بنية ويب قوية وآمنة وقابلة للتوسع. من خلال تفويض إنهاء SSL، والتعامل مع الملفات الثابتة، وموازنة الحمل عبر خدمات الواجهة الخلفية، يسمح Nginx لمنطق التطبيق بالتركيز على ما يفعله بشكل أفضل: تقديم منطق الأعمال. تذكر دائمًا اختبار التكوين الخاص بك باستخدام nginx -t قبل إعادة تحميل الخدمة لضمان عدم وجود توقف عن العمل. سيؤدي إتقان هذه الأنماط إلى رفع قدرات DevOps وتطوير الواجهة الخلفية الخاصة بك بشكل كبير.

Share: