فتح منفذ لبرنامج وب على جهازك باستخدام استضافة VPS أو استضافة موقع

كثيرا ما يعمل المطورون على تجربة البرامج على الشبكة المحلية قبل وضعها بشكل نهائي على الشبكة العامة الإنترنت لكن بعض الاختبارات تتطلب ربط البرامج على الشبكة العامة لتمكين آخرين من تجربته. مؤخرا احتجت لتجربة نقطة API من جهاز لايستطيع الاتصال عبر منفذ الشبكة الداخلي 192.168.1.0/24 لذا بحثت ووجدت هذه الطريقة التي يمكن أن تسد كثيراً من الاحتياجات.

وهذه طريقة تشبه الخدمة التي تقدمها ngrok لكن باستخدام خادمك الخاص وبلا تسجيل أو قيود

المتطلبات

  • وجود VPS
    لا بد لعمل الخدمة من وجود VPS تتصل به وتطلب منه أن يحول الاتصالات الواردة له على منفذ ما إلى منفذ نفق ssh tunnel
  • تثبيت Nginx
    للعمل كوكيل للاتصالات وتمريرها لنفق ssh

إعداد Nginx

بعد تثبيت Nginx ننشئ ملف ولنسميه هنا tunnel لوضع الإعدادات فيه

sudo vi /etc/nginx/sites-available/tunnel

سيفتح الملف محرر نصوص vi نضع في داخل الملف النص التالي:

server {
    listen 8080;
    location / {
         proxy_set_header Host $host:$server_port;
         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;
         proxy_pass http://127.0.0.1:9000;
    }
}

ثم نحفظ الملف ونغلقه.

هنا سيستمع خادم الوب Nginx إلى المنفذ 8080 ويمرر الاتصال إلى المنفذ المحلي ذو الرقم 9000

الإعدادت الأخرى لجعل خادم الوب يمرر بيانات الاتصال بحيث تصل الاتصالات للبرنامج المحلي وكأنها من المنفذ الخارجي للخادم وليست من المنفذ المحلي في الخادم وهذا يفيد في بعض البرامج التي تعتمد على ذلك مثل بعض استخدامات Django Rest Framework المعروف اختصارا ب DRF.

طريقة أبسط

ربما يكفي في كثير من الحالات استخدام الإعدادات التالية:

server {
    listen 8080;
    location / {
         proxy_pass http://127.0.0.1:9000;
    }
}

تفعيل تمرير Nginx

ثم نفعل الموقع بوضع رابط للإعدادات في دليل sites-enabled هكذا:

sudo ln -s /etc/nginx/sites-available/tunnel /etc/nginx/sites-enabled/tunnel

وهذا يسمى symbolic link حيث وضعنا اختصارا للإعدادات في دليل المواقع المفعلة يربط مع الأصل في دليل المواقع المتوفرة.

لنُعد تحميل إعدادات Nginx لتفعيل التغييرات الجديدة:

nginx -s reload

إذا كان لديك جدار ناري يعمل افتح المنفذ الخارجي الجديد، مثلاً:

sudo ufw allow 8080

إتمام العملية بتفعيل نفق SSH

لم يتبقى الآن إلا إنشاء الاتصال بين الجهاز المحلي والخادم البعيد، هكذا:

ssh -f -N -T -R 9000:localhost:8000  remote_user@185.40.*.*

هنا ننشئ النفق ونقول اللآتي:
اربط المنفذ 9000 على الخادم البعيد بالمنفذ 8000 على الخادم المحلي .

و remote_user تمثل اسم المستخدم ويلحقها عنوان IP الكامل للخادم البعيد

استمتع

الآن يمكنك زيارة الموقع باستخدام IP الخادم مضيفا له رقم المنفذ المطلوب.
مثلا:
http://78.230.200.120:8080

ملاحظة

استخدمنا ثلاث منافذ في هذه العملية الأول فقط على الجهاز المحلي والأخرى على الخادم:

  1. منفذ 8000 وهو المنفذ الذي يعمل عليه البرنامج على جهازنا المحلي والذي نزوره عادة هكذا http://127.0.0.1:8000
  2. منفذ 9000 هو المنفذ المحلي على VPS والذي يفتحه SSH ويقوم Nginx بالربط عليه
  3. منفذ 8080 المنفذ الخارجي الذي ستصل للموقع منه عبر IP الخاص ب VPS مثال: http://185.1.1.200:8080

لتقديم الشكر

إذا أعجبكم المقال وأردتكم تشجيعي لكتابة المزيد يمكنكم إرسال عملات رقمية على عنواني هذا فخدمات مثل بايبال وماشابه معزول عنها كثير من أبناء المجتمع العربي.

bitcoincash:qz6s5pdwc7az3020zfqjacm3d6jp6j4jeustggkhcu

مصدر المقال

https://medium.com/the-software-reliever/expose-localhost-to-the-public-www-with-a-vps-nginx-and-ssh-tunneling-daefc0275757

4 إعجابات

جميل جميل جميل :slight_smile:

إعجاب واحد (1)