Vagrant的端口转发不起作用

Han*_*Gay 107 apache centos http portforwarding vagrant

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

 config.vm.forward_port "web", 80, 4567
Run Code Online (Sandbox Code Playgroud)

但是当我向该端口发出请求时,它们会失败.Safari报告的错误是"Safari无法打开页面" http:// localhost:4567 / ",因为服务器意外断开了连接."

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

Mit*_*ell 258

我想添加一个额外的注释,这通常是由VM中的服务器引起的,因为它绑定到了127.0.0.1环回.您需要确保绑定服务器,0.0.0.0以便所有接口都可以访问它.

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

除此之外,史蒂夫所说的是正确的:确保它在VM内运行并尝试其他一些简单的服务器来尝试找出它是否是配置问题.

  • 这是运行webrick的猎枪所需的修复. (8认同)
  • 是的,这就是问题所在.需要绑定到0.0.0.0.我想知道Vagrant有没有办法让这个问题在将来自动消失? (3认同)

Ste*_*osh 78

我会把它作为一个实际的答案,而不仅仅是更多的评论.

第一件事:curl 'http://localhost:80'从VM内部尝试.如果这不起作用,那么它肯定不是端口转发.

下一步: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).

  • 基本上,我吮吸RedHat和`iptables`.我检查确保传入连接的默认策略是"ACCEPT",但是没有注意RedHat的自定义规则链,该规则链具有全部"REJECT"规则作为链中的最后一条规则.tl; dr我在路上有防火墙而且没注意到. (14认同)

小智 32

我在CentOS 6.3 w/NGINX上遇到了同样的问题,发现答案是在流浪盒上的iptables中.

从流浪盒上的bash,请按照下列步骤操作:

首先列出当前的iptable规则

iptables -L -v
Run Code Online (Sandbox Code Playgroud)

然后刷新当前规则:

iptables -F
Run Code Online (Sandbox Code Playgroud)

在tcp端口22上允许SSH连接

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

设置INPUT,FORWARD和OUTPUT链的默认策略

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
Run Code Online (Sandbox Code Playgroud)

设置localhost的访问权限

iptables -A INPUT -i lo -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

接受属于已建立和相关连接的数据包

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

保存设置

/sbin/service iptables save
Run Code Online (Sandbox Code Playgroud)

列出修改后的规则

iptables -L -v
Run Code Online (Sandbox Code Playgroud)

卷曲localhost:[port#]或从浏览器外面的流浪汉点击它

有关CentOS iptable配置的更多信息,请点击此处:

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

祝好运.

  • 这是我在CentOS上的.`service iptables stop` (4认同)
  • 谢谢你写这篇文章.我在Fedora 18上遇到了同样的问题,所以它不是特定于CentOS的.我希望能帮到别人.:) (2认同)
  • `iptables -F`独自为我做了 (2认同)

小智 27

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

service iptables stop
chkconfig iptables off
Run Code Online (Sandbox Code Playgroud)