﷽
كثيرا ما يعمل المطورون على تجربة البرامج على الشبكة المحلية قبل وضعها بشكل نهائي على الشبكة العامة الإنترنت لكن بعض الاختبارات تتطلب ربط البرامج على الشبكة العامة لتمكين آخرين من تجربته. مؤخرا احتجت لتجربة نقطة 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
ملاحظة
استخدمنا ثلاث منافذ في هذه العملية الأول فقط على الجهاز المحلي والأخرى على الخادم:
- منفذ
8000وهو المنفذ الذي يعمل عليه البرنامج على جهازنا المحلي والذي نزوره عادة هكذا http://127.0.0.1:8000 - منفذ
9000هو المنفذ المحلي على VPS والذي يفتحه SSH ويقوم Nginx بالربط عليه - منفذ
8080المنفذ الخارجي الذي ستصل للموقع منه عبر IP الخاص ب VPS مثال: http://185.1.1.200:8080
لتقديم الشكر
إذا أعجبكم المقال وأردتكم تشجيعي لكتابة المزيد يمكنكم إرسال عملات رقمية على عنواني هذا فخدمات مثل بايبال وماشابه معزول عنها كثير من أبناء المجتمع العربي.
bitcoincash:qz6s5pdwc7az3020zfqjacm3d6jp6j4jeustggkhcu
