Vagrant 的端口转发不起作用[关闭]
-
12-11-2019 - |
题
我在最后遇到了一个小问题 入门指南 vagrant
. 。我正在开发一个运行 Apache2 的 CentOS Basebox(通过 Puppet 配置)。我已经使用以下行设置了网络请求的端口转发 Vagrantfile
:
config.vm.forward_port "web", 80, 4567
但是当我向该端口发出请求时,它们失败了。Safari 报告的错误是“Safari 无法打开页面”http://本地主机:4567/“因为服务器意外断开了连接。”
我做了一个 vagrant reload
并看到“[默认] -- web:80 => 4567(适配器1)”在滚动条中,那么我应该从哪里开始解决这个问题呢?谢谢。
解决方案
我会将其作为实际答案,而不仅仅是更多评论。
第一件事:尝试 curl 'http://localhost:80'
从虚拟机内部。如果这不起作用,那么肯定不是端口转发。
下一个:尝试 curl -v 'http://localhost:4567/'
从您的主机。Curl 可能会比 Safari 提供更好的错误消息。
我会检查是否有防火墙设置限制对端口 80 的访问。默认的 Vagrant VM (Ubuntu) 没有设置防火墙,但你说你正在使用其他东西,所以可能值得检查一下。
如果不是这样,请尝试在端口 80 上列出 Apache 以外的其他内容。Python 附带了一个简单的 HTTP 服务器,您可以使用 - 转到带有以下命令的文件夹 index.html
并运行 sudo python -m SimpleHTTPServer 80
, ,然后尝试用两个盒子中的curl来击打它。如果有效,则可能是 Apache 配置问题。如果是这种情况,我没有足够的 Apache 经验来提供帮助(我使用 nginx)。
其他提示
我想添加一个额外的注释,这通常是由虚拟机内的服务器引起的,因为它绑定到 127.0.0.1
, ,这是环回。您需要确保服务器绑定到 0.0.0.0
以便所有接口都可以访问它。
一些内置应用程序服务器(例如 Django 的开发服务器和一些 Ruby 服务器)默认为 127.0.0.1
默认情况下,所以这是需要注意的事情。
除此之外,史蒂夫所说的都是正确的:确保它在虚拟机内工作,并尝试其他一些简单的服务器来尝试找出是否是配置问题。
我在使用 NGINX 的 CentOS 6.3 上遇到了同样的问题,并在 vagrant box 的 iptables 中找到了答案。
在 vagrant box 上的 bash 中,按照以下步骤操作:
首先列出当前的iptable规则
iptables -L -v
然后刷新当前规则:
iptables -F
允许 tcp 端口 22 上的 SSH 连接
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
Curl localhost:[port#] 或从外部 vagrant 在浏览器中点击它
有关 CentOS iptable 配置的更多信息,请参见此处:
http://wiki.centos.org/HowTos/Network/IPTables
祝你好运。
对我来说更好的解决方案是禁用防火墙
service iptables stop
chkconfig iptables off
我也想像米切尔一样添加另一个注释。如果我的情况我会从 80 转发到 6789
$ curl -v http://localhost:6789
我得到了
<HTML>
<HEAD><TITLE>Redirection</TITLE></HEAD>
<BODY><H1>Redirect</H1></BODY>
然后,我改用IP地址,它得到了正确的html消息。