Nginx Proxy Manager (NPM) هو واجهة ويب مجانية ومفتوحة المصدر تضع لوحة تحكم سهلة أمام Nginx، بحيث يمكنك توجيه نطاق إلى أي تطبيق مستضاف ذاتيًا والحصول على شهادة Let's Encrypt تلقائية دون أن تلمس ملف إعداد على الإطلاق. لإعداده، تُشغّل ملف Docker Compose صغيرًا واحدًا، وتفتح لوحة الإدارة على المنفذ 81، وتضيف «proxy host» يربط app.yourdomain.com بالعنوان الداخلي لحاوية، وتطلب SSL بنقرتين. يسلك هذا الدليل المسار كاملًا — التثبيت، وأول تسجيل دخول، وأول proxy host لديك، وHTTPS المجاني، والخطآن اللذان يتعثّر فيهما الجميع تقريبًا — ويوضح متى يكون NPM الأداة المناسبة مقابل Caddy أو Cloudflare Tunnel.
ما هو Nginx Proxy Manager؟
Nginx Proxy Manager هو صورة Docker تغلّف Nginx ولوحة تحكم ويب حتى تدير البروكسيات العكسية وشهادات SSL من المتصفح بدلًا من تحرير nginx.conf. يصدر تحت رخصة MIT ويطوّره المطوّر jc21، وتصفه الوثائق الرسمية بأنه طريقة «لإعادة التوجيه إلى مواقعك التي تعمل في المنزل أو غيره، بما في ذلك SSL المجاني، دون الحاجة إلى معرفة الكثير عن Nginx أو Let's Encrypt». يتولّى إعادة توجيه النطاقات، وعمليات إعادة التوجيه، ومضيفي 404، وتدفقات TCP/UDP الخام، ويُصدر شهادات مجانية عبر Let's Encrypt، ويدعم قوائم الوصول، ومصادقة HTTP الأساسية، وعدة مستخدمين مع سجل تدقيق. إذا كنت تستضيف عدة خدمات على خادم واحد وتريد طريقة بنقرة زر لمنح كلٍّ منها نطاقًا فرعيًا نظيفًا مع HTTPS، فإن NPM مصمّم لهذه المهمة بالضبط.
قبل أن تبدأ
تحتاج إلى ثلاثة أشياء: خادم مثبّت عليه Docker وDocker Compose، واسم نطاق، وسجلات DNS تشير إلى عنوان IP العام لخادمك. يعمل NPM أينما يعمل Docker — سواء كان VPS، أو خادمًا منزليًا، أو Raspberry Pi (يُدعم amd64 وarm64؛ وأُسقط armv7 ذو 32 بت في إصدار 2.14). أنشئ سجل A لكل خدمة تريد كشفها، على سبيل المثال npm.yourdomain.com وnextcloud.yourdomain.com، وكلاهما يشير إلى العنوان نفسه؛ فـ NPM يقرّر وجهة الحركة بناءً على اسم المضيف. تأكّد من أن المنفذين 80 و443 مفتوحان في جدارك الناري حتى يتمكن Let's Encrypt من التحقق من الشهادات ويصل الزوار إلى مواقعك. إن لم تكن قد أمّنت الجهاز بعد، فافعل ذلك أولًا — يغطي دليلنا للساعة الأولى الآمنة على VPS خطوات الجدار الناري وSSH التي يفترض NPM أنها موجودة بالفعل.
كيفية تثبيت Nginx Proxy Manager باستخدام Docker Compose
أنشئ مجلدًا، وضَع فيه ملف docker-compose.yml، ثم شغّله. تتضمّن الإصدارات الحديثة SQLite، لذا لم تعد بحاجة إلى حاوية MySQL منفصلة لإعداد أساسي — هذا هو الإعداد الأدنى والحالي من تعليمات الإعداد الرسمية:
services:
npm:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # HTTP العام
- '443:443' # HTTPS العام
- '81:81' # واجهة الإدارة — أبقِها بعيدة عن الإنترنت العام
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
ثم شغّله:
docker compose up -d
يستغرق التشغيل الأول دقيقة أو دقيقتين بينما يولّد NPM مفاتيح JWT الخاصة به، ويهيّئ قاعدة البيانات، وينشئ مستخدم الإدارة الافتراضي. الخط المستقر الحالي هو سلسلة 2.15.x؛ وتثبيت وسم إصدار بدلًا من latest (على سبيل المثال jc21/nginx-proxy-manager:2.15.1) يجعل الترقيات متعمّدة بدلًا من أن تكون تلقائية. الوحدتان التخزينيتان (volumes) هما الحالة الوحيدة المهمة — ./data يحتفظ بمضيفيك وإعداداتك، و./letsencrypt يحتفظ بشهاداتك — لذا فإن نسخ هذين المجلدين احتياطيًا ينسخ إعداد NPM بالكامل.
أول تسجيل دخول وتأمين لوحة الإدارة
افتح http://your-server-ip:81 وسجّل الدخول ببيانات الاعتماد الافتراضية التي توفّرها الوثائق: البريد الإلكتروني [email protected]، وكلمة المرور changeme. يجبرك NPM على تعيين بريد إلكتروني حقيقي وكلمة مرور قوية فورًا — افعل ذلك، لأن المنفذ 81 يمثّل سطح إدارة غير مصادَق عليه حتى تفعل. الخطوة الأهم على الإطلاق في التحصين هي ألّا تكشف المنفذ 81 للإنترنت العام أبدًا. اربطه بـ localhost أو بواجهة خاصة، وصِل إليه عبر VPN أو نفق SSH، أو قيّده بقاعدة جدار ناري؛ وإذا كنت تستخدم Tailscale أو شبكة mesh مماثلة، فضع واجهة الإدارة على تلك الواجهة فقط. نشر اللوحة على عنوان IP عام هو أشيع أخطاء NPM ويسلّم المهاجم جدول التوجيه بأكمله. المنفذان 80 و443 مقصودان لمواجهة العالم؛ أما 81 فلا.
كيفية إضافة أول proxy host لديك
الـ proxy host هو قاعدة واحدة تربط اسم مضيف عام بخدمة داخلية. في اللوحة، افتح Hosts → Proxy Hosts → Add Proxy Host واملأ أربعة حقول: Domain Name (nextcloud.yourdomain.com)، وScheme (http أو https)، وForward Hostname/IP، وForward Port. التفصيل الحاسم: اسم مضيف التوجيه هو اسم الحاوية الهدف أو عنوان IP الخاص بها كما يُرى من داخل Docker، وليس localhost. إذا كان NPM وتطبيقك يتشاركان شبكة Docker، فاستخدم اسم الحاوية (nextcloud) ومنفذها الداخلي (80). فعّل Block Common Exploits، وشغّل Websockets Support لأي شيء لحظي — اللوحات، وتطبيقات الدردشة، وأدوات إعادة التحميل الحية — وإلا فستفشل في الاتصال بصمت. احفظ، وسيكتب NPM إعداد Nginx ويعيد تحميله في الخلفية. كرّر هذا مرة لكل خدمة؛ فيصبح كل نطاق فرعي مُدخلًا مرتّبًا يُدار على حدة في القائمة.
إضافة SSL مجانًا مع Let's Encrypt
افتح علامة التبويب SSL الخاصة بـ proxy host، واختر Request a new SSL Certificate، وفعّل Force SSL وHTTP/2، ووافق على شروط Let's Encrypt، ثم احفظ. يُكمل NPM تحدي HTTP-01 الخاص بـ Let's Encrypt عبر المنفذ 80، ويثبّت الشهادة، ويجدّدها تلقائيًا قبل انتهائها — دون مهام cron، ودون أوامر certbot. للحصول على شهادة wildcard (*.yourdomain.com) يجب أن تستخدم تحدي DNS بدلًا من ذلك، لأن Let's Encrypt لا يُصدر شهادات wildcard عبر HTTP. في علامة تبويب SSL، فعّل Use a DNS Challenge، واختر مزوّدك (Cloudflare هو الخيار الشائع)، والصق رمز API مقصورًا على تحرير DNS لتلك المنطقة — يشرح دليل رموز API الخاص بـ Cloudflare كيفية إنشاء رمز بصلاحية Zone:DNS:Edit. عندئذٍ تغطّي شهادة wildcard واحدة كل نطاق فرعي، فلا تُصدر شهادة جديدة لكل تطبيق. هذا الـ SSL المدمج ذاتي التجديد هو أكبر سبب على الإطلاق يجعل الناس يختارون NPM بدلًا من Nginx المُعدّ يدويًا.
Nginx Proxy Manager مقابل Caddy مقابل Cloudflare Tunnel
ليس NPM الطريقة الوحيدة للحصول على بروكسي عكسي مع HTTPS تلقائي. يعتمد الخيار الصحيح على ما إذا كنت تريد واجهة رسومية، أو ملف إعداد، أو عدم فتح أي منافذ إطلاقًا.
| الأداة | نمط الإعداد | HTTPS التلقائي | المنافذ المفتوحة المطلوبة | الأفضل لـ |
|---|---|---|---|---|
| Nginx Proxy Manager | واجهة رسومية على الويب | نعم (Let's Encrypt) | 80، 443 | مختبرات المنزل والفِرق التي تريد الإعداد بالنقر |
| Caddy | ملف نصي (Caddyfile) | نعم (مدمج) | 80، 443 | من يرتاحون في الطرفية ويريدون الإعداد في Git |
| Cloudflare Tunnel | لوحة تحكم Cloudflare | نعم (حافة Cloudflare) | لا شيء (صادر فقط) | كشف التطبيقات خلف CGNAT أو دون IP عام |
اختر NPM حين تقدّر وجود لوحة مرئية وتدير أكثر من مضيف أو مضيفين. فضّل Caddy إن كنت تفضّل الاحتفاظ بملف إعداد خاضع للتحكم بالإصدارات على النقر عبر واجهة. والجأ إلى Cloudflare Tunnel حين لا تستطيع فتح منافذ واردة إطلاقًا — خلف CGNAT، أو شبكة منزلية محكمة الإغلاق، أو مزوّد إنترنت سكني. يشغّل كثير من المستضيفين ذاتيًا NPM ونفقًا معًا: يوصل النفق الحركة إلى الجهاز، ويوجّهها NPM إلى الحاوية الصحيحة.
استكشاف الأخطاء: 502 Bad Gateway والشهادات الفاشلة
مشكلتان تفسّران معظم مواضيع الدعم في NPM. غالبًا ما يعني 502 Bad Gateway أن NPM لا يستطيع الوصول إلى التطبيق على العنوان الذي أعطيته إياه. الحل يخص الشبكة لا NPM: يجب أن تتشارك الحاوية الهدف وNPM شبكة Docker، ويجب أن يكون اسم مضيف التوجيه هو اسم الحاوية مع منفذها الداخلي — لا localhost، ولا 127.0.0.1، ولا عنوان IP العام للمضيف، إذ لا يُحيل أيٌّ منها إلى المكان الصحيح من داخل حاوية NPM. ضع الخدمتين على شبكة Docker خارجية واحدة وأشر إلى التطبيق بالاسم.
أما فشل شهادة SSL فيعود عادةً إلى إمكانية الوصول: يجب أن يشير DNS الخاص بالنطاق إلى خادمك بالفعل، ويجب أن يكون المنفذ 80 مفتوحًا ومُعاد توجيهه حتى يتمكن Let's Encrypt من إكمال تحدي HTTP. وإذا كان النطاق خلف بروكسي السحابة البرتقالية من Cloudflare، فقد يفشل تحدي HTTP-01 — إما أن تحوّل ذلك السجل إلى DNS-only أثناء الإصدار، أو تستخدم طريقة تحدي DNS بدلًا منه. وتنطبق أيضًا حدود المعدّل: يقيّد Let's Encrypt عدد الشهادات لكل نطاق في الأسبوع، لذا توقّف عن إعادة محاولة طلب معطوب وأصلِح السبب الجذري أولًا.
الأسئلة الشائعة
هل Nginx Proxy Manager مجاني؟
نعم. إنه مفتوح المصدر بالكامل تحت رخصة MIT دون أي مستوى مدفوع أو حجب للميزات. التكلفة الوحيدة هي الخادم الذي تشغّله عليه، وصورة Docker نفسها مجانية للسحب والاستخدام تجاريًا.
ما بيانات تسجيل الدخول الافتراضية لـ Nginx Proxy Manager؟
حساب الإدارة الافتراضي هو البريد الإلكتروني [email protected] بكلمة المرور changeme. يطلب منك NPM تغيير كليهما إلى بريد إلكتروني حقيقي وكلمة مرور قوية في أول تسجيل دخول، ويجب ألّا تترك القيم الافتراضية كما هي أبدًا.
ما المنافذ التي يستخدمها Nginx Proxy Manager؟
يستخدم المنفذ 80 لـ HTTP، والمنفذ 443 لـ HTTPS، والمنفذ 81 للوحة الإدارة. يجب أن يكون المنفذان 80 و443 قابلين للوصول علنًا؛ أما المنفذ 81 فينبغي أن يبقى خاصًا وألّا يُكشف للإنترنت أبدًا.
Nginx Proxy Manager مقابل Caddy — أيهما أفضل؟
لا أحدهما أفضل بإطلاق؛ فهما يناسبان أشخاصًا مختلفين. يمنحك NPM واجهة رسومية بالنقر والإشارة وهو أسهل للمبتدئين ولمختبرات المنزل متعددة المضيفين، بينما يستخدم Caddy إعدادًا نصيًا مضغوطًا أكثر ملاءمة للتحكم بالإصدارات والأتمتة. وكلاهما يوفّر HTTPS تلقائيًا من Let's Encrypt.
لماذا يُظهر Nginx Proxy Manager خطأ 502 Bad Gateway؟
لأنه لا يستطيع الوصول إلى تطبيق الخلفية على العنوان المُعدّ. عادةً لا تكون الحاوية وNPM على شبكة Docker نفسها، أو يكون مضيف التوجيه مضبوطًا على localhost بدلًا من اسم الحاوية ومنفذها الداخلي. أصلِح شبكة Docker ويزول خطأ 502.
Sources
- Nginx Proxy Manager — تعليمات الإعداد الكاملة — ملف Docker Compose الرسمي، والمنافذ، والوحدات التخزينية
- Nginx Proxy Manager — الدليل والميزات — قائمة الميزات، ومنفذ الإدارة، والوصف
- Nginx Proxy Manager على GitHub — رخصة MIT، والإصدارات، والمصدر
- Let's Encrypt — جهة إصدار الشهادات المجانية التي يستخدمها NPM
- Cloudflare — إنشاء رمز API — رمز تحدي DNS لشهادات wildcard
وقاص احمد وسیر
وقاص احمد وسیر مطوّر ومهندس أتمتة بخبرة تزيد على 8 سنوات في بناء أنظمة إنتاجية يستخدمها أكثر من 100 ألف شخص. يبني تطبيقات SaaS متعددة المستأجرين، وأتمتة بالذكاء الاصطناعي (n8n، تدفقات LLM، بوتات واتساب)، وبنية استضافة (WHM/cPanel، CloudLinux) — وهو صانع WaSphere وFlowMaticX وعلامة الاستضافة WaseerHost. أنجز أكثر من 100 مشروع لشركات صغيرة ومتوسطة ووكالات وشركات ناشئة ممولة.



