إعادة توجيه منفذ Vagrant لا تعمل [مغلق]
-
12-11-2019 - |
سؤال
أواجه مشكلة صغيرة في نهاية دليل البدء ل vagrant
.أنا أعمل على صندوق أساسي CentOS يعمل عليه Apache2 (يتم توفيره عبر Puppet).لقد قمت بإعداد إعادة توجيه المنفذ لطلبات الويب باستخدام السطر التالي Vagrantfile
:
config.vm.forward_port "web", 80, 4567
ولكن عندما أقوم بتقديم طلبات إلى هذا المنفذ، فإنها تفشل.الخطأ الذي أبلغ عنه Safari هو "لا يمكن لـ Safari فتح الصفحة "http://localhost:4567/" لأن الخادم قام بقطع الاتصال بشكل غير متوقع."
لقد فعلت ذلك ل vagrant reload
ورأيت "[افتراضي] -- الويب:80 => 4567 (المحول 1)" في التمرير، فأين يجب أن أبدأ في استكشاف أخطاء هذا الأمر وإصلاحها؟شكرًا.
المحلول
سأجعل من هذا إجابة فعلية بدلاً من مجرد المزيد من التعليقات.
اول شيء:يحاول curl 'http://localhost:80'
من داخل VM.إذا لم ينجح ذلك، فهذا بالتأكيد ليس إعادة توجيه المنفذ.
التالي:يحاول curl -v 'http://localhost:4567/'
من جهازك المضيفقد يمنحك Curl رسالة خطأ أفضل من Safari.
سأتأكد من عدم وجود جدران حماية تم إعدادها لتقييد الوصول إلى المنفذ 80.لا يأتي Vagrant VM (Ubuntu) الافتراضي مزودًا بجدار حماية، لكنك قلت أنك تستخدم شيئًا آخر، لذا قد يكون من المفيد التحقق منه.
إذا لم يكن الأمر كذلك، فحاول إنشاء شيء آخر غير Apache المدرج في المنفذ 80.تأتي Python مع خادم HTTP بسيط يمكنك استخدامه - انتقل إلى المجلد الذي به index.html
و اهرب sudo python -m SimpleHTTPServer 80
, ، ثم حاول ضرب ذلك باللف من كلا الصندوقين.إذا نجح ذلك، فمن المحتمل أن تكون مشكلة في تكوين Apache.ليس لدي خبرة كافية مع Apache للمساعدة إذا كان هذا هو الحال (أستخدم nginx).
نصائح أخرى
أردت إضافة ملاحظة إضافية مفادها أن هذا غالبًا ما يحدث بسبب الخادم الموجود داخل الجهاز الافتراضي لأنه يرتبط بـ 127.0.0.1
, ، وهو الاسترجاع.ستحتاج إلى التأكد من أن الخادم مرتبط بـ 0.0.0.0
بحيث يمكن لجميع الواجهات الوصول إليه.
بعض خوادم التطبيقات المضمنة مثل خوادم تطوير Django وبعض خوادم Ruby هي الافتراضية 127.0.0.1
افتراضيًا، فهذا شيء يجب الانتباه إليه.
بخلاف ذلك، ما قاله ستيف صحيح:تأكد من أنه يعمل من داخل الجهاز الافتراضي وجرب بعض الخوادم البسيطة الأخرى لمحاولة معرفة ما إذا كانت هناك مشكلة في التكوين.
لقد واجهت نفس المشكلة على CentOS 6.3 w/NGINX ووجدت الإجابة موجودة في iptables في المربع المتشرد.
من bash on the vagrant box، اتبع الخطوات التالية:
قم أولاً بإدراج قواعد iptable الحالية
iptables -L -v
ثم قم بمسح القواعد الحالية:
iptables -F
السماح باتصالات SSH على منفذ TCP 22
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
قم بتعيين السياسات الافتراضية لسلاسل INPUT وFORWARD وOUTPUT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
تعيين الوصول للمضيف المحلي
iptables -A INPUT -i lo -j ACCEPT
قبول الحزم التابعة للاتصالات القائمة وذات الصلة
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
احفظ التغييرات
/sbin/service iptables save
قائمة القواعد المعدلة
iptables -L -v
قم بلف المضيف المحلي:[port#] أو اضغط عليه في متصفحك من الخارج
تم العثور على مزيد من المعلومات حول تكوينات CentOS iptable هنا:
http://wiki.centos.org/HowTos/Network/IPTables
حظ سعيد.
الحل الأفضل بالنسبة لي هو تعطيل جدار الحماية
service iptables stop
chkconfig iptables off
أريد أن أضيف ملاحظة أخرى مثل ميتشل أيضًا.إذا كانت حالتي أقوم بإرسالها إلى 6789 من 80
$ curl -v http://localhost:6789
وحصلت
<HTML>
<HEAD><TITLE>Redirection</TITLE></HEAD>
<BODY><H1>Redirect</H1></BODY>
ثم استخدمت عنوان IP بدلاً من ذلك، وحصلت على رسالة html الصحيحة.