Vagrant 的端口转发不起作用

发布于 2024-11-06 11:32:02 字数 1459 浏览 0 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

拔了角的鹿 2024-11-13 11:32:02

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

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

除此之外,史蒂夫所说的都是正确的:确保它在虚拟机内工作,并尝试其他一些简单的服务器来尝试找出是否是配置问题。

I wanted to add an additional note that often this is caused by the server within the VM because it binds to 127.0.0.1, which is loopback. You'll want to make sure that the server is bound to 0.0.0.0 so that all interfaces can access it.

Some built-in app servers such as Django's development servers and some Ruby servers default to 127.0.0.1 by default so this is something to watch out for.

Other than that, what Steve said holds true: Make sure it works from within the VM and try some other simple servers to try and figure out if it is a configuration problem.

×纯※雪 2024-11-13 11:32:02

我会将其作为实际答案,而不仅仅是更多评论。

第一件事:尝试从虚拟机内 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)。

I'll make this an actual answer instead of just more comments.

First thing: try curl 'http://localhost:80' from within the VM. If that doesn't work, then it's definitely not the port forwarding.

Next: try curl -v 'http://localhost:4567/' from your host machine. Curl might give you a better error message than Safari.

I'd check that there are no firewalls set up restricting access to port 80. The default Vagrant VM (Ubuntu) doesn't come with a firewall set up, but you said you're using something else, so it might be worth it to check.

If that's not it, try making something other than Apache listed on port 80. Python ships with a simple HTTP server you can use -- go to the folder with index.html and run sudo python -m SimpleHTTPServer 80, then try hitting that with curl from both boxes. If that works, then it's probably an Apache configuration issue. I don't have enough experience with Apache to help if that's the case (I use nginx).

蘑菇王子 2024-11-13 11:32:02

我在使用 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

设置 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#] 或从外部 vagrant 在浏览器中点击它

有关 CentOS iptable 配置的更多信息可在此处找到:

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

祝你好运。

I had the same problem on CentOS 6.3 w/ NGINX and found the answer to be in the iptables on the vagrant box.

From bash on the vagrant box, follow these steps:

First list current iptable rules

iptables -L -v

Then flush current rules:

iptables -F

Allow SSH connections on tcp port 22

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Set default policies for INPUT, FORWARD and OUTPUT chains

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Set access for localhost

iptables -A INPUT -i lo -j ACCEPT

Accept packets belonging to established and related connections

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

Save settings

/sbin/service iptables save

List modified rules

iptables -L -v

Curl localhost:[port#] or hit it in your browser from outside vagrant

More info on CentOS iptable configs found here:

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

Good luck.

丢了幸福的猪 2024-11-13 11:32:02

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

service iptables stop
chkconfig iptables off

A better solution for me is disabling the firewall

service iptables stop
chkconfig iptables off
三生一梦 2024-11-13 11:32:02

我也想像米切尔一样添加另一个注释。如果我的情况是,我将其从 80 转发到 6789

$ curl -v http://localhost:6789

然后我得到了

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

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

I want to add another note like Mitchell as well. if my case I forward it to 6789 from 80

$ curl -v http://localhost:6789

And I got

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

Then, I used the IP address instead, it got the correct html message.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文