流浪者的端口转发不起作用


108

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

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

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

我做了一个,vagrant reload然后在滚动条中看到了“ [默认]-网络:80 => 4567(适配器1)”,那么我应该从哪里开始进行故障排除?谢谢。


1
什么curl -v 'http://localhost:4567/'发言权?有时Safari在隐藏错误消息方面有点太好了。
史蒂夫·洛

2
另外,curl 'http://localhost:80'从VM本身可以正常工作吗?如果不是,则问题不在于端口转发。
史蒂夫·洛

4
curlVM内部的@Steve Losh 正在运行。curl从主持人给我(52) Empty reply from server
汉克·盖伊

无业游民的重载帮助我解决类似的问题...
嘲笑

对我而言,这是symfony 3:-当运行sudo php bin / console server:run时,它使服务器在127.0.0.1:8000上运行,然后我无法从Web浏览器访问,无法访问所访问的虚拟机。当在Web目录中运行sudo php -S 0.0.0.0:8000时,我可以访问127.0.0.1:8082/app_dev.php。不明白为什么会这样,但是行得通。
Darius.V,2016年

Answers:


79

我将使之成为一个实际的答案,而不只是更多的评论。

第一件事:curl 'http://localhost:80'从虚拟机内部尝试。如果那行不通,那肯定不是端口转发。

下一步:curl -v 'http://localhost:4567/'从主机尝试。与Safari相比,Curl可能会为您提供更好的错误消息。

我会检查是否没有设置防火墙来限制对端口80的访问。默认的Vagrant VM(Ubuntu)没有设置防火墙,但是您说您正在使用其他工具,所以值得这样做去检查。

如果不是那样,请尝试制作端口80上列出的Apache以外的其他产品。Python附带了一个可以使用的简单HTTP服务器-转到index.html并运行文件夹sudo python -m SimpleHTTPServer 80,然后尝试从两个框中使用curl进行打击。如果可行,则可能是Apache配置问题。如果是这种情况,我在Apache方面没有足够的经验(我使用nginx)。


14
基本上,我在RedHat和上很烂iptables。我检查以确保默认策略是ACCEPT用于传入连接的,但没有注意RedHat的自定义规则链,该链具有一个包罗万象的REJECT规则作为链中的最后一条规则。tl; dr我有防火墙,只是没注意到。
汉克·盖伊

谢谢!那个狡猾的防火墙规则是导致我在RHEL 5.5上遇到问题的原因。
Roosh 2012年

我在下面重印Robert的评论,因为它是一种非常简单的检查方法:service iptables stop以root身份运行以快速排除Guest防火墙问题。如果需要,稍后重新启用它。
Arnaud Meuret

1
奇怪的centos图片也有同样的问题;iptables几乎限制了一切。我遵循了这个iptable centos指南第3节“编写简单规则集”中的解决方案),它的工作
原理很吸引人

对我来说,curl在里面工作,所以我启用了网络连接Vagrantfile并运行了命令vagrant reload
abhirathore2006

266

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

默认情况下,某些内置的应用程序服务器(例如Django的开发服务器)和一些Ruby服务器默认为127.0.0.1默认设置,因此请注意。

除此之外,史蒂夫(Steve)所说的话是正确的:确保它可以在VM内运行,并尝试使用其他一些简单的服务器来尝试确定这是否是配置问题。


8
这是shot弹枪运行webrick所需的修复程序。
Ronze

这为我解决了问题。要将Torquebox绑定到0.0.0.0,请运行以下命令:torquebox run -b 0.0.0.0
Bartek Skwira,2013年

3
是的,这就是问题所在。需要绑定到0.0.0.0。我想知道流浪汉是否有办法在将来自动解决这个问题?
CMCDragonkai 2014年

1
sinatra和webrick的相同问题:“ set:bind,'0.0.0.0'”解决了该问题
pragmatic_programmer

这是我的解决方法
sixty4bit 2015年

33

我在带有NGINX的CentOS 6.3上遇到了同样的问题,发现答案在无业游民的盒子上的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

设置本地主机的访问权限

iptables -A INPUT -i lo -j ACCEPT

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

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

保存设置

/sbin/service iptables save

列出修改后的规则

iptables -L -v

卷曲localhost:[port#]或在浏览器中从游民游击中它

有关CentOS iptable配置的更多信息,请参见:

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

祝好运。


2
感谢您撰写本文。我在Fedora 18上遇到了同样的问题,因此它不是特定于CentOS的。希望对您有所帮助。:)
本杰明·奥克斯

4
这是我在CentOS上的。service iptables stop
罗伯特

2
iptables -F一个人为我做到了
code_monk

我通过此博客文章中列出的一些exec命令找到了一个可靠的解决方案,以解决同一问题techie-notebook.blogspot.com/2014/05/…我不得不以前那样用$ {os_path}部分替换路径没有可用的变量。
约书亚·弗里克

27

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

service iptables stop
chkconfig iptables off

+1为我工作。对于使用本地VirtualBox实例,我不需要防火墙。
Eduardo

如果您想临时修复,这是一个好技巧
brrystrw 2015年

0

我也想添加另一个音符,例如Mitchell。如果我的情况是将其从80转发到6789

$ curl -v http://localhost:6789

我得到了

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.