انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

إعداد Nginx Proxy Manager: بروكسي عكسي بواجهة ويب

تثبيت Nginx Proxy Manager عبر Docker، تجديد شهادات SSL تلقائياً، إضافة proxy host، قوائم الوصول، إعادة التوجيه، البث والمواقع المخصصة.

وقت القراءة: 12 دقيقة المراقبة
nginx proxy managerreverse proxyssldockerواجهة ويبlet's encrypt
الكاتب
REXE Teknoloji Network & Security Team
المحرر
REXE Teknoloji Technical Editorial
أول نشر
آخر تحديث

إعداد Nginx Proxy Manager: بروكسي عكسي بواجهة ويب

Nginx Proxy Manager (NPM) هو أداة مفتوحة المصدر تتيح لك إدارة Nginx reverse proxy من خلال واجهة ويب سهلة الاستخدام. يمكنك إدارة شهادات SSL وتكوين proxy host والتحكم في الوصول دون الحاجة لسطر الأوامر.

ما هو Nginx Proxy Manager؟

الميزات الرئيسية:

  • واجهة ويب: لوحة إدارة سهلة الاستخدام
  • تجديد SSL تلقائي: SSL مجاني مع Let's Encrypt
  • Proxy Hosts: تكوين البروكسي العكسي
  • Redirection Hosts: إعادة توجيه URL
  • Stream Hosts: توجيه منافذ TCP/UDP
  • Access Lists: التحكم في الوصول حسب IP والمستخدم
  • Custom Locations: كتل location مخصصة لـ Nginx

التثبيت عبر Docker

تكوين Docker Compose

hljs yaml
# docker-compose.yml
version: '3.8'
services:
  npm:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - '80:80'
      - '443:443'
      - '81:81'
    volumes:
      - npm_data:/data
      - npm_letsencrypt:/etc/letsencrypt
    environment:
      - TZ=Asia/Riyadh

volumes:
  npm_data:
  npm_letsencrypt:
hljs bash
docker compose up -d
docker ps | grep nginx-proxy-manager

تسجيل الدخول الأول

http://عنوان_IP_الخادم:81

بيانات الدخول الافتراضية:
البريد:    admin@example.com
كلمة المرور: changeme

سيُطلب منك تغيير كلمة المرور والبريد الإلكتروني عند أول تسجيل دخول.

إضافة Proxy Host

Proxy Host أساسي

  1. Proxy HostsAdd Proxy Host
  2. Domain Names: app.example.com
  3. Scheme: http
  4. Forward Hostname / IP: 192.168.1.10
  5. Forward Port: 3000
  6. Block Common Exploits: تفعيل
  7. Websockets Support: تفعيل لتطبيقات WebSocket

إضافة شهادة SSL

  1. SSL Certificate: Request a new SSL Certificate
  2. Force SSL: تفعيل
  3. HTTP/2 Support: تفعيل
  4. HSTS Enabled: تفعيل
  5. Save

البروكسي مع شبكة Docker

hljs yaml
version: '3.8'
services:
  npm:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - '80:80'
      - '443:443'
      - '81:81'
    volumes:
      - npm_data:/data
      - npm_letsencrypt:/etc/letsencrypt
    networks:
      - proxy_network

  webapp:
    image: your-webapp:latest
    container_name: webapp
    expose:
      - "3000"
    networks:
      - proxy_network

networks:
  proxy_network:
    driver: bridge

volumes:
  npm_data:
  npm_letsencrypt:

قوائم الوصول

التحكم في الوصول حسب IP

  1. Access ListsAdd Access List
  2. Name: المسؤول فقط

في تبويب Access:

Allow: 192.168.1.0/24
Deny: all

مصادقة HTTP الأساسية

في تبويب Authorization:

اسم المستخدم: admin
كلمة المرور: كلمة_مرور_قوية123!

Redirection Host

  1. Redirection HostsAdd Redirection Host
  2. Domain Names: old.example.com
  3. Forward Domain: new.example.com
  4. HTTP Code: 301
  5. Preserve Path: تفعيل

Stream Host (بروكسي TCP/UDP)

  1. StreamsAdd Stream
  2. Incoming Port: 25565
  3. Forward Host: 192.168.1.50
  4. Forward Port: 25565
  5. TCP Forwarding: تفعيل

تكوين Nginx مخصص

تبويب Advanced

hljs nginx
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;

client_max_body_size 100M;

proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

شهادة SSL Wildcard

  1. SSL CertificatesAdd SSL Certificate
  2. Domain Names: *.example.com
  3. Use a DNS Challenge: تفعيل
  4. DNS Provider: Cloudflare، DigitalOcean، إلخ.
  5. Credentials: أدخل رمز API

النسخ الاحتياطي والاستعادة

hljs bash
# نسخ احتياطي لبيانات NPM
docker exec nginx-proxy-manager tar -czf /tmp/npm-backup.tar.gz /data /etc/letsencrypt
docker cp nginx-proxy-manager:/tmp/npm-backup.tar.gz ./npm-backup-$(date +%Y%m%d).tar.gz

# الاستعادة
docker cp ./npm-backup.tar.gz nginx-proxy-manager:/tmp/
docker exec nginx-proxy-manager tar -xzf /tmp/npm-backup.tar.gz -C /
docker restart nginx-proxy-manager

التحديث

hljs bash
docker compose pull
docker compose up -d
docker image prune -f

توصيات الأمان

hljs bash
ports:
  - '80:80'
  - '443:443'
  - '127.0.0.1:81:81'

# الوصول عبر نفق SSH
ssh -L 81:localhost:81 user@server-ip

مع Nginx Proxy Manager على خوادم REXE، يمكنك إدارة جميع تطبيقات الويب من نقطة واحدة والحصول على شهادات SSL وتجديدها تلقائياً. تتيح واجهة الويب إعداد بروكسي عكسي احترافي دون التعامل مع ملفات تكوين Nginx.

الأسئلة الشائعة

لا أستطيع الوصول إلى لوحة إدارة Nginx Proxy Manager (المنفذ 81).

تحقق من أن المنفذ 81 مفتوح في جدار الحماية: 'ufw allow 81/tcp'. تأكد من أن الحاوية تعمل: 'docker ps | grep nginx-proxy-manager'. تحقق من سجلات Docker: 'docker logs nginx-proxy-manager'. في حالة تعارض المنافذ، غيّر منفذ الإدارة في docker-compose.yml.

لا يمكن الحصول على شهادة SSL، خطأ 'Challenge failed'.

تحقق من أن سجل DNS للنطاق يشير إلى عنوان IP الخادم. تأكد من أن المنفذ 80 متاح من الخارج (مطلوب لـ HTTP-01 challenge). إذا كنت تستخدم Cloudflare، عطّل البروكسي مؤقتاً (DNS Only). لشهادات wildcard، استخدم DNS Challenge.

أضفت proxy host لكن أحصل على خطأ 502 Bad Gateway.

تحقق من أن خدمة Backend تعمل وتستمع على المنفذ المحدد. يجب أن تكون حاويات Docker في نفس الشبكة. إذا كنت تستخدم اسم الحاوية كـ Forward Hostname، تأكد من أن كلتا الحاويتين متصلتان بنفس شبكة Docker.

اتصالات WebSocket لا تعمل.

فعّل 'Websockets Support' في إعدادات proxy host. أضف في تبويب Advanced: 'proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";'.

أحصل على أخطاء عند رفع ملفات كبيرة.

أضف 'client_max_body_size 100M;' في تبويب Advanced لـ proxy host. تأكد من أن تطبيق Backend يسمح أيضاً برفع ملفات كبيرة. زد قيم المهلة: 'proxy_read_timeout 300;'.

اختفت إعداداتي بعد تحديث Nginx Proxy Manager.

يجب أن تُحفظ الإعدادات إذا كانت Docker volumes مكوّنة بشكل صحيح. تحقق من أن volumes معرّفة في docker-compose.yml. احرص دائماً على أخذ نسخة احتياطية قبل التحديث.

مقالات ذات صلة

حركة الشبكةالداخل Gbpsالخارج Gbps