معظم التطبيقات المُستضافة ذاتيًا تستمع على منفذ محلي مثل 127.0.0.1:3000 وتتحدث HTTP عاديًا. يقف الوسيط العكسي في الأمام على المنفذين 80/443، ينهي HTTPS بشهادة حقيقية، ويمرّر حركة المرور إلى ذلك المنفذ المحلي — مانحًا https://app.yourdomain.com نظيفًا ومتيحًا تشغيل عدة تطبيقات خلف IP واحد. إليك الطريقتين الشائعتين.
المتطلبات المسبقة
- نطاق بسجل A يشير إلى IP خادمك (انتظر انتشار DNS).
- المنفذان 80 و443 مفتوحان — راجع كيف تُعدّ جدار UFW الناري.
- تطبيقك يعمل محليًا، مثلًا على
127.0.0.1:3000.
الخيار A — Caddy (HTTPS تلقائي، سطر واحد)
sudo apt install -y caddy
echo 'app.yourdomain.com { reverse_proxy 127.0.0.1:3000 }' | sudo tee /etc/caddy/Caddyfile
sudo systemctl restart caddy
هذا كل شيء — يحصل Caddy على شهادة Let's Encrypt للنطاق ويجدّدها تلقائيًا.
الخيار B — nginx + Certbot
sudo apt install -y nginx certbot python3-certbot-nginx
أنشئ /etc/nginx/sites-available/app:
server {
listen 80;
server_name app.yourdomain.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;
}
}
فعّله وأضف HTTPS:
sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d app.yourdomain.com
يعدّل Certbot الإعداد لخدمة HTTPS ويهيّئ التجديد التلقائي.
تحذيرات صادقة
- DNS والمنافذ هما الفشلان المعتادان. يجب أن يشير سجل A إلى هنا وأن يكون قد انتشر، وأن يكون 80/443 قابلين للوصول، وإلا فشل إصدار الشهادة. تعيد كلتا الأداتين المحاولة بمجرد إصلاح ذلك.
- لا تكشف إلا ما تقصده. أبقِ التطبيق مرتبطًا بـ
127.0.0.1كي لا يكون قابلًا للوصول إلا عبر الوسيط، لا مباشرةً. - HTTPS يحتاج نطاقًا، لا IP مجرّدًا — يصدر Let's Encrypt للأسماء.
الخطوات التالية
الوسيط العكسي هو ما يتيح لخادم واحد خدمة أشياء كثيرة — راجع استضافة عدة خدمات ذاتيًا خلف IP واحد. أتشغّل التطبيق في حاوية؟ ابدأ بـ كيف تثبّت Docker. ولإبقاء التطبيق نفسه حيًّا عبر إعادات التشغيل والأعطال، راجع كيف تُنشئ خدمة systemd.
التعليقات
لا تعليقات بعد. كن الأول.