110

我在入门指南vagrant的末尾遇到了一个小问题。我正在开发一个运行 Apache2 的 CentOS basebox(通过 Puppet 配置)。我使用以下行为 Web 请求设置了端口转发Vagrantfile

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

但是当我向该端口发出请求时,它们会失败。Safari 报错 'Safari can't open the page "<a href="http://localhost:4567/" rel="noreferrer">http://localhost:4567/" 因为服务器意外丢弃了联系。'

我做了一个vagrant reload并在滚动中看到“[default] -- web: 80 => 4567 (adapter 1)”,那么我应该从哪里开始解决这个问题?谢谢。

4

5 回答 5

273

我想补充一点,这通常是由 VM 中的服务器引起的,因为它绑定到127.0.0.1,即环回。您需要确保服务器已绑定,0.0.0.0以便所有接口都可以访问它。

一些内置的应用程序服务器,例如 Django 的开发服务器和一些 Ruby 服务器默认为127.0.0.1默认设置,因此需要注意这一点。

除此之外,Steve 所说的也是正确的:确保它在 VM 内工作,并尝试一些其他简单的服务器来尝试找出它是否是配置问题。

于 2011-05-14T05:11:41.557 回答
81

我会让这个成为一个实际的答案,而不是更多的评论。

第一件事: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)。

于 2011-05-13T13:07:03.077 回答
33

我在 CentOS 6.3 w/NGINX 上遇到了同样的问题,发现答案在 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

卷曲 l​​ocalhost:[port#] 或从 vagrant 外部在浏览器中点击它

更多关于 CentOS iptable 配置的信息可以在这里找到:

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

祝你好运。

于 2012-12-19T01:16:12.407 回答
27

对我来说更好的解决方案是禁用防火墙

service iptables stop
chkconfig iptables off
于 2012-12-20T18:38:16.900 回答
0

我还想添加另一个注释,例如 Mitchell。如果我的情况,我将它从 80 转发到 6789

$ curl -v http://localhost:6789

我得到了

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

然后,我改用 IP 地址,它得到了正确的 html 消息。

于 2011-10-19T07:20:35.850 回答