El reenvío de puertos de Vagrant no funciona [cerrado]
-
12-11-2019 - |
Pregunta
Me encuentro con un pequeño problema al final del Guía de introducción para vagrant
.Estoy trabajando en una caja base CentOS que tiene Apache2 ejecutándose (aprovisionamiento a través de Puppet).He configurado el reenvío de puertos para solicitudes web usando la siguiente línea en Vagrantfile
:
config.vm.forward_port "web", 80, 4567
Pero cuando hago solicitudes a ese puerto, fallan.El error informado por Safari es "Safari no puede abrir la página"http://localhost:4567/"Porque el servidor interrumpió inesperadamente la conexión".
hice un vagrant reload
y vi "[predeterminado] - web:80 => 4567 (adaptador 1)" en el desplazamiento, entonces, ¿por dónde debería empezar a solucionar este problema?Gracias.
Solución
Haré de esta una respuesta real en lugar de solo más comentarios.
Lo primero:intentar curl 'http://localhost:80'
desde dentro de la máquina virtual.Si eso no funciona, entonces definitivamente no es el reenvío de puertos.
Próximo:intentar curl -v 'http://localhost:4567/'
desde su máquina host.Curl podría darte un mejor mensaje de error que Safari.
Verificaría que no haya firewalls configurados que restrinjan el acceso al puerto 80.La máquina virtual Vagrant (Ubuntu) predeterminada no viene con un firewall configurado, pero dijiste que estás usando otra cosa, por lo que podría valer la pena verificarlo.
Si no es así, intente incluir algo que no sea Apache en el puerto 80.Python viene con un servidor HTTP simple que puedes usar: ve a la carpeta con index.html
y correr sudo python -m SimpleHTTPServer 80
, luego intenta golpear eso con curl desde ambas cajas.Si eso funciona, entonces probablemente sea un problema de configuración de Apache.No tengo suficiente experiencia con Apache para ayudar si ese es el caso (uso nginx).
Otros consejos
Quería agregar una nota adicional de que a menudo esto es causado por el servidor dentro de la VM porque se vincula a 127.0.0.1
, que es loopback.Querrá asegurarse de que el servidor esté vinculado a 0.0.0.0
para que todas las interfaces puedan acceder a él.
Algunos servidores de aplicaciones integrados, como los servidores de desarrollo de Django y algunos servidores Ruby, utilizan de forma predeterminada 127.0.0.1
de forma predeterminada, por lo que es algo a tener en cuenta.
Aparte de eso, lo que dijo Steve es cierto:Asegúrese de que funcione desde la máquina virtual y pruebe con otros servidores simples para intentar descubrir si se trata de un problema de configuración.
Tuve el mismo problema en CentOS 6.3 con NGINX y encontré que la respuesta estaba en iptables en el vagrant box.
Desde bash en vagrant box, sigue estos pasos:
Primera lista de reglas actuales de iptable
iptables -L -v
Luego elimine las reglas actuales:
iptables -F
Permitir conexiones SSH en el puerto tcp 22
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Establecer políticas predeterminadas para cadenas de ENTRADA, ADELANTE y SALIDA
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
Establecer acceso para localhost
iptables -A INPUT -i lo -j ACCEPT
Aceptar paquetes pertenecientes a conexiones establecidas y relacionadas.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Guardar ajustes
/sbin/service iptables save
Listar reglas modificadas
iptables -L -v
Curl localhost:[puerto#] o presiónelo en su navegador desde fuera de vagrant
Más información sobre las configuraciones de iptable de CentOS se encuentran aquí:
http://wiki.centos.org/HowTos/Network/IPTables
Buena suerte.
Una mejor solución para mí es desactivar el firewall.
service iptables stop
chkconfig iptables off
También quiero agregar otra nota como Mitchell.si mi caso lo reenvio al 6789 del 80
$ curl -v http://localhost:6789
y tengo
<HTML>
<HEAD><TITLE>Redirection</TITLE></HEAD>
<BODY><H1>Redirect</H1></BODY>
Luego, usé la dirección IP y recibió el mensaje html correcto.