دليل nginx كوكيل عكسي
في هذه الصفحة
يقف الوكيل العكسي أمام تطبيقاتك ويمرّر إليها طلبات الزوار. مع وجود nginx في الواجهة، يصبح تطبيق Node.js أو حاوية Docker أو لوحة تحكم تعمل على منفذ ما متاحًا على https://app.example.com، مع HTTPS وترويسات صحيحة ومكان واحد لإدارة كل شيء.
يشرح هذا الدليل خطوة بخطوة إعداد nginx كوكيل عكسي على Ubuntu: كتلة server، والترويسات، وWebSockets، وHTTPS المجاني، والأخطاء التي ستواجهها على الأرجح.
ما الذي يفعله الوكيل العكسي
- نقطة دخول عامة واحدة. يستمع nginx على المنفذين 80 و443 ويوجّه كل نطاق أو مسار إلى التطبيق المناسب، فلا تواجه التطبيقات نفسها الإنترنت أبدًا.
- HTTPS في مكان واحد. يتولى nginx الشهادات، ويمكن للتطبيقات خلفه استخدام HTTP العادي على localhost.
- عدة تطبيقات على خادم واحد. يمكن توجيه
app.example.comوapi.example.comوexample.com/blogكلٌّ إلى خدمة مختلفة. - ميزات إضافية: الضغط والتخزين المؤقت وحدود الرفع وقواعد الوصول، دون المساس بالتطبيق.
الخطوة 1: ثبّت nginx
sudo apt update sudo apt install nginx
افتح http://your-server-ip وستظهر لك صفحة الترحيب الخاصة بـ nginx. إذا كنت تستخدم ufw، فاسمح بحركة الويب عبر sudo ufw allow 'Nginx Full'.
تأكد من أن تطبيقك يعمل ويمكن الوصول إليه من الخادم نفسه، مثلًا عبر curl http://127.0.0.1:3000. إذا فشل ذلك، فسيفشل nginx أيضًا.
شغّل nginx وتطبيقاتك بصلاحيات root كاملة: خطط HytHost KVM VPS تبدأ من €2.92 شهريًا.
عرض خطط VPSالخطوة 2: أنشئ كتلة server للوكيل
في Ubuntu، يحصل كل موقع على ملف في /etc/nginx/sites-available/، ويُفعَّل برابط في sites-enabled. أنشئ الملف /etc/nginx/sites-available/app.example.com:
server {
listen 80;
server_name app.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;
}
}
فعّله، واختبر الإعدادات، ثم أعد التحميل:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
وجّه سجل A الخاص بالنطاق إلى خادمك، وسيعرض http://app.example.com تطبيقك. شغّل دائمًا nginx -t قبل إعادة التحميل: فهو يكتشف الأخطاء الإملائية قبل أن توقف الموقع.
الترويسات والشرطة المائلة في النهاية
Hostتمرّر النطاق الذي طلبه الزائر. بدونها يرسل nginx العنوان الموجود فيproxy_pass، فتتعطل التطبيقات التي تبني الروابط من اسم المضيف.X-Real-IPوX-Forwarded-Forتمرّران عنوان IP الخاص بالزائر. بدونهما يبدو كل طلب وكأنه قادم من127.0.0.1.X-Forwarded-Protoتخبر التطبيق ما إذا كان الزائر قد استخدم HTTPS، حتى لا يدخل في حلقة إعادة توجيه.
تأتي حزمة nginx في Ubuntu بهذه الأسطر في /etc/nginx/proxy_params، لذا فإن include proxy_params; اختصار مفيد.
الشرطة المائلة في النهاية مهمة. لتطبيق تحت مسار معيّن:
location /app/ {
proxy_pass http://127.0.0.1:3000/;
}
مع الشرطة المائلة بعد المنفذ، يصل /app/login إلى التطبيق على شكل /login. وبدونها يستلم التطبيق المسار الكامل /app/login.
WebSockets
تستخدم تطبيقات الدردشة ولوحات المعلومات الحية وكثير من لوحات الإدارة WebSockets، وهي تحتاج إلى ترويستين إضافيتين. أضف هذا الـ map مرة واحدة داخل كتلة http، مثلًا في ملف جديد /etc/nginx/conf.d/websocket.conf:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
ثم داخل location:
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 1h;
يغلق nginx الاتصال الممرَّر إذا لم يُرسل أي شيء لمدة 60 ثانية؛ والقيمة الأطول لـ proxy_read_timeout تُبقي اتصالات WebSockets الهادئة مفتوحة. القيمة proxy_http_version 1.1 افتراضية فقط بدءًا من nginx 1.29.7، بينما يأتي Ubuntu 24.04 بالإصدار 1.24، لذا أبقِ هذا السطر.
الخطوة 3: HTTPS مجاني عبر Certbot
sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/local/bin/certbot sudo certbot --nginx -d app.example.com
يحصل Certbot على شهادة Let's Encrypt مجانية، ويضيف إعدادات HTTPS إلى كتلة server لديك، ويمكنه إعادة توجيه HTTP إلى HTTPS. ويجدد الشهادة تلقائيًا؛ تحقق من ذلك عبر sudo certbot renew --dry-run. المزيد عن الشهادات في كيفية الحصول على شهادة SSL مجانية.
حل أخطاء 502 و504 و413
| الخطأ | السبب المعتاد | الحل |
|---|---|---|
| 502 Bad Gateway | لا يستطيع nginx الوصول إلى التطبيق: فهو متوقف أو انهار أو يستمع على منفذ أو عنوان آخر | شغّل التطبيق، وتحقق من المنفذ عبر curl http://127.0.0.1:PORT، واقرأ /var/log/nginx/error.log |
| 504 Gateway Timeout | استغرق التطبيق أكثر من 60 ثانية للرد | سرّع معالجة الطلب، أو ارفع قيمة proxy_read_timeout لذلك الـ location |
| 413 Request Entity Too Large | الملف المرفوع أكبر من الحد الافتراضي لـ nginx وهو 1 MB | اضبط client_max_body_size 50m; في كتلة server |
| حلقة إعادة توجيه | لا يعرف التطبيق أن الزائر استخدم HTTPS | مرّر X-Forwarded-Proto وأخبر التطبيق أنه يعمل خلف وكيل |
بعد كل تعديل: sudo nginx -t، ثم sudo systemctl reload nginx.
شغّله على HytHost VPS
يحتاج الوكيل العكسي إلى خادم تتحكم فيه بالمنفذين 80 و443. تعمل خطط HytHost VPS على KVM مع وصول root كامل وتخزين SSD وحماية من DDoS؛ اختر Ubuntu 24.04 واتبع الخطوات أعلاه. هل تشغّل تطبيقاتك في حاويات؟ أعدّ Docker أولًا عبر كيفية تثبيت Docker على Ubuntu، واربط منافذ الحاويات بـ 127.0.0.1 حتى لا يصل إليها سوى nginx.
الأسئلة الشائعة
يمرّر الوكيل العكسي الطلبات إلى تطبيق واحد أو أكثر خلفه. أما موازن الأحمال فهو وكيل عكسي يوزّع الطلبات على عدة نسخ من التطبيق نفسه. يستطيع nginx القيام بالأمرين، باستخدام كتلة upstream تسرد هذه النسخ.
لا يستطيع nginx الوصول إلى التطبيق خلفه. تحقق من أن التطبيق يعمل ويستمع على العنوان والمنفذ المحددين في proxy_pass، واقرأ /var/log/nginx/error.log لمعرفة السبب الدقيق.
لا، إذا كان التطبيق يعمل على الخادم نفسه. يتولى nginx اتصال HTTPS مع الزوار ويتواصل مع التطبيق عبر HTTP عادي على 127.0.0.1، وهي حركة لا تغادر الجهاز أبدًا.
امنح كل تطبيق كتلة server خاصة به مع server_name خاص، مثل app.example.com وapi.example.com، ولكلٍّ منها proxy_pass إلى منفذ مختلف.
نعم. انشر منفذ كل حاوية على 127.0.0.1 فقط ووجّه proxy_pass إليه. هكذا تبقى الحاويات بعيدة عن الإنترنت العام، وهذا مهم لأن المنافذ التي ينشرها Docker تتجاوز ufw.
استضف تطبيقاتك خلف nginx
خطط HytHost KVM VPS مع وصول root كامل وتخزين SSD وحماية من DDoS تبدأ من €2.92 شهريًا.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursهل كان هذا الدليل مفيدًا؟