Vagrants Portweiterleitung funktioniert nicht [geschlossen]

108

Ich habe am Ende des Handbuchs Erste Schritte fürvagrant ein kleines Problem . Ich arbeite an einer CentOS-Basebox, auf der Apache2 ausgeführt wird (Bereitstellung über Puppet). Ich habe die Portweiterleitung für Webanfragen mithilfe der folgenden Zeile eingerichtet Vagrantfile:

 config.vm.forward_port "web", 80, 4567

Aber wenn ich Anfragen an diesen Port stelle, schlagen sie fehl. Der von Safari gemeldete Fehler lautet "Safari kann die Seite" http: // localhost: 4567 / " nicht öffnen, da der Server die Verbindung unerwartet getrennt hat."

Ich habe a ausgeführt vagrant reloadund "[default] - web: 80 => 4567 (Adapter 1)" in der Schriftrolle gesehen. Wo soll ich also mit der Fehlerbehebung beginnen? Vielen Dank.

Hank Gay
quelle
1
Was curl -v 'http://localhost:4567/'sagt das aus? Manchmal ist Safari etwas zu nett, um Fehlermeldungen zu verbergen.
Steve Losh
2
Funktioniert auch curl 'http://localhost:80'die VM selbst? Wenn nicht, liegt das Problem nicht in der Portweiterleitung.
Steve Losh
4
@Steve Losh curlaus der VM heraus funktioniert. curlvom Gastgeber gibt mir (52) Empty reply from server.
Hank Gay
Das vagabundierende Nachladen hilft mir bei ähnlichen Fragen ...
Haudoing
Für mich war der Fall mit Symfony 3: - Wenn sudo php bin / console server ausgeführt wird: run, wodurch der Server unter 127.0.0.1:8000 ausgeführt wird, kann ich nicht über den Webbrowser zugreifen, in der virtuellen Maschine wird zugegriffen. Wenn sudo php -S 0.0.0.0:8000 im Webverzeichnis ausgeführt wurde, konnte ich auf 127.0.0.1:8082/app_dev.php zugreifen . Verstehe nicht, warum das passiert, aber es funktioniert.
Darius.V

Antworten:

79

Ich werde dies zu einer tatsächlichen Antwort machen, anstatt nur mehr Kommentare.

Das erste: Versuchen Sie es curl 'http://localhost:80'innerhalb der VM. Wenn das nicht funktioniert, ist es definitiv nicht die Portweiterleitung.

Weiter: Versuchen Sie es curl -v 'http://localhost:4567/'von Ihrem Host-Computer aus. Curl gibt Ihnen möglicherweise eine bessere Fehlermeldung als Safari.

Ich würde überprüfen, ob keine Firewalls eingerichtet sind, die den Zugriff auf Port 80 einschränken. Auf der Standard-Vagrant-VM (Ubuntu) ist keine Firewall eingerichtet, aber Sie sagten, Sie verwenden etwas anderes, sodass es sich möglicherweise lohnt überprüfen.

Wenn dies nicht der Fall ist, versuchen Sie, etwas anderes als Apache auf Port 80 zu erstellen. Python wird mit einem einfachen HTTP-Server geliefert, den Sie verwenden können. Wechseln Sie in den Ordner mit index.htmlund führen Sie ihn aus sudo python -m SimpleHTTPServer 80. Versuchen Sie dann, ihn mit Curl aus beiden Feldern zu treffen. Wenn das funktioniert, liegt wahrscheinlich ein Apache-Konfigurationsproblem vor. Ich habe nicht genug Erfahrung mit Apache, um zu helfen, wenn dies der Fall ist (ich verwende Nginx).

Steve Losh
quelle
14
Grundsätzlich lutsche ich an RedHat und iptables. Ich habe überprüft, ob die Standardrichtlinie ACCEPTfür eingehende Verbindungen gilt, habe jedoch nicht auf die benutzerdefinierte Regelkette von RedHat geachtet, die REJECTals letzte Regel in der Kette eine Sammelregel enthält. Ich hatte eine Firewall im Weg und bemerkte es einfach nicht.
Hank Gay
Vielen Dank! Diese hinterhältige Firewall-Regel hat meine Probleme mit RHEL 5.5 verursacht.
Roosh
Ich drucke Roberts Kommentar unten erneut aus, da dies eine so einfache Möglichkeit ist, Folgendes zu überprüfen: service iptables stopAls Root ausführen, um ein Problem mit der Gast-Firewall schnell auszuschließen. Aktivieren Sie es später bei Bedarf erneut.
Arnaud Meuret
1
hatte das gleiche Problem mit einem seltsamen Centos-Bild; iptablesbeschränkte fast alles. Ich folgte diesem iptable Centos-Leitfaden (Lösung in Abschnitt 3 Schreiben eines einfachen
Regelsatzes
Für mich arbeitete Curl im Inneren, also aktivierte ich das Networking Vagrantfileund führte den Befehl ausvagrant reload
abhirathore2006
266

Ich wollte einen zusätzlichen Hinweis hinzufügen, dass dies häufig durch den Server in der VM verursacht wird, da er an einen 127.0.0.1Loopback bindet . Sie sollten sicherstellen, dass der Server gebunden ist, 0.0.0.0damit alle Schnittstellen darauf zugreifen können.

Einige integrierte App-Server, wie z. B. die Entwicklungsserver von Django, und einige Ruby-Server sind standardmäßig 127.0.0.1aktiviert. Achten Sie daher darauf.

Abgesehen davon gilt das, was Steve gesagt hat: Stellen Sie sicher, dass es innerhalb der VM funktioniert, und probieren Sie einige andere einfache Server aus, um herauszufinden, ob es sich um ein Konfigurationsproblem handelt.

Mitchell
quelle
8
Dies war die Lösung, die für den Betrieb von Webrick mit Schrotflinten erforderlich war.
Ronze
Dies löste das Problem für mich. Um Torquebox an 0.0.0.0 zu binden, führen Sie es aus mit: Torquebox Run -b 0.0.0.0
Bartek Skwira
3
Ja, das war das Problem. Müssen an 0.0.0.0 binden. Ich frage mich, ob es einen Weg gibt, wie Vagrant dieses Problem in Zukunft automatisch lösen kann.
CMCDragonkai
1
Das gleiche Problem mit Sinatra und Webrick: "set: bind, '0.0.0.0'" löste das Problem
pragmatic_programmer
Dies war die Lösung für mich
Sixty4bit
33

Ich hatte das gleiche Problem unter CentOS 6.3 mit NGINX und fand die Antwort in den Iptables auf der Vagrant-Box.

Führen Sie die folgenden Schritte aus, wenn Sie auf die Vagabundkiste schlagen:

Listen Sie zuerst die aktuellen iptable-Regeln auf

iptables -L -v

Dann spülen Sie die aktuellen Regeln:

iptables -F

SSH-Verbindungen am TCP-Port 22 zulassen

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Legen Sie Standardrichtlinien für INPUT-, FORWARD- und OUTPUT-Ketten fest

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Legen Sie den Zugriff für localhost fest

iptables -A INPUT -i lo -j ACCEPT

Akzeptieren Sie Pakete, die zu etablierten und verwandten Verbindungen gehören

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Einstellungen speichern

/sbin/service iptables save

Liste geänderter Regeln

iptables -L -v

Curl localhost: [port #] oder drücke es in deinem Browser von außerhalb des Vagabunden

Weitere Informationen zu CentOS iptable-Konfigurationen finden Sie hier:

http://wiki.centos.org/HowTos/Network/IPTables

Viel Glück.

Travyo
quelle
2
Danke, dass du das geschrieben hast. Ich hatte das gleiche Problem mit Fedora 18, daher ist es nicht spezifisch für CentOS. Ich hoffe das hilft jemand anderem. :)
Benjamin Oakes
4
Das war ich auf CentOS. service iptables stop
Robert
2
iptables -Fallein hat es für mich
getan
Ich habe eine solide Lösung für dieses Problem mit einigen in diesem Blogbeitrag aufgeführten Exec-Befehlen gefunden, um dasselbe Problem zu lösen. Techie-notebook.blogspot.com/2014/05/… Ich musste meinen Pfad wie bisher durch die Abschnitte $ {os_path} ersetzen Diese Variable ist nicht verfügbar.
Joshua Fricke
27

Eine bessere Lösung für mich ist das Deaktivieren der Firewall

service iptables stop
chkconfig iptables off
edwinallenz
quelle
+1 Hat für mich gearbeitet. Für die Verwendung einer lokalen VirtualBox-Instanz war keine Firewall erforderlich.
Eduardo
Es ist ein guter Trick, wenn Sie eine vorübergehende Lösung wollen
brrystrw
0

Ich möchte noch eine Notiz wie Mitchell hinzufügen. Wenn mein Fall ist, leite ich ihn von 80 an 6789 weiter

$ curl -v http://localhost:6789

Und ich habe

<HTML>
<HEAD><TITLE>Redirection</TITLE></HEAD>
<BODY><H1>Redirect</H1></BODY>

Dann habe ich stattdessen die IP-Adresse verwendet, sie hat die richtige HTML-Nachricht erhalten.

Larry Cai
quelle