我在Getting Started guide for vagrant
结束时遇到了一个小问题。我正在开发运行Apache2的CentOS basebox(通过Puppet进行配置)。我使用Vagrantfile
中的以下行设置了Web请求的端口转发:
config.vm.forward_port "web", 80, 4567
但是当我向该端口发出请求时,它们会失败。 Safari报告的错误是'Safari无法打开页面“http://localhost:4567/”,因为服务器意外断开了连接。'
我做了vagrant reload
,并在滚动条中看到“[默认] - 网址:80 => 4567(适配器1)”,那么我应该从哪里开始对此进行故障排除?感谢。
答案 0 :(得分:255)
我想添加一个额外的注释,这通常是由VM中的服务器引起的,因为它绑定到127.0.0.1
,这是环回。您需要确保服务器绑定到0.0.0.0
,以便所有接口都可以访问它。
某些内置应用服务器(如Django的开发服务器和一些Ruby服务器)默认默认为127.0.0.1
,因此需要注意这一点。
除此之外,史蒂夫所说的也是如此:确保它在虚拟机内运行并尝试其他简单的服务器来尝试找出它是否是配置问题。
答案 1 :(得分:78)
我会将此作为实际答案,而不仅仅是更多评论。
首先:在VM中尝试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
,然后尝试用两个盒子的卷曲来打击它。如果可行,则可能是Apache配置问题。如果是这样的话,我没有足够的经验来帮助Apache(我使用的是nginx)。
答案 2 :(得分:32)
我在CentOS 6.3 w / NGINX上遇到了同样的问题,发现答案是在流浪盒上的iptables中。
从流浪盒上的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
设置localhost的访问权限
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#]或在浏览器中从外部流浪汉点击
有关CentOS iptable配置的更多信息,请点击此处:
祝你好运。答案 3 :(得分:27)
对我来说更好的解决方案是禁用防火墙
service iptables stop
chkconfig iptables off
答案 4 :(得分:0)
我想添加像米切尔这样的另一个音符。如果是我的情况我将它从80转发到6789
$ curl -v http://localhost:6789
我得到了
<HTML>
<HEAD><TITLE>Redirection</TITLE></HEAD>
<BODY><H1>Redirect</H1></BODY>
然后,我使用了IP地址,它得到了正确的html消息。