我在最后遇到了一个小问题 入门指南 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消息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top