在Vagrant虚拟机中访问ngrok web界面

18

我有一个用于本地开发的Vagrant box。我正在开发一个webhook,该webhook从外部调用; 所以我想使用ngrok.com来代理请求到我的Vagrant环境。我对这个ngrok的东西还很陌生。

我正在尝试找出如何访问ngrok的Web界面,这通常在http://127.0.0.1:4040上。当然,从我的浏览器中无法访问,因为它在Vagrant box之外,所以它的localhost不是Vagrant的localhost。

我(认为)知道了Vagrant的IP地址。我在config.yaml文件(是的,带有a)中找到了它,在vm:network:private_network:192.168.nnn.nnn下

感谢您的帮助。


我对你的问题感到困惑。如果你在主机上运行ngrok,为什么不能将主机的浏览器指向localhost?或者你是在vagrant box中运行代理吗? - Software Engineer
我正在Vagrant的虚拟机中运行ngrok。公平地说,我还没有通过ngrok收到请求。目前,我只是想看看如何在主机上显示Web界面。 - NotoriousWebmaster
1
如果你阅读了Vagrant的“网络”文档,它们会从通过端口公开Web服务开始,然后如果这还不够,它会记录如何为盒子设置静态IP,最后是如何设置和使用动态IP。你可能只需要端口转发就可以了。 - Software Engineer
1
你知道WireShark吗? - Software Engineer
@软件工程师:我对你的评论感到困惑。Ngrok正在运行在guest中,那里只有命令行,而ngrok的Web界面应该从运行在主机中的浏览器中访问。被接受的答案并没有回答这个问题——正确的答案是描述web_addr: 0.0.0.0:4040参数,以便将ngrok的Web界面暴露给本地网络中的其他计算机。 - Chupo_cro
5个回答

54

在尝试访问虚拟机中的站点时,请在主机上放置ngrok并使用以下命令调用:

ngrok http -host-header=rewrite mydomain.com:80

您需要通过主机浏览器访问您的网站:

http://123456.ngrok.io

但是它将把它改写为mydomain.com

然后您可以通过以下方式访问ngrok仪表板(在主机机器的浏览器中):

http://127.0.0.1:4040

文档位于https://ngrok.com/docs#host-header。祝你好运!


这并没有回答问题,问题是如何访问运行在“guest”中的ngrok Web界面。 - Chupo_cro

25

你的问题是这个:https://github.com/inconshreveable/ngrok/issues/153

你需要创建一个包含以下内容的配置文件:

web_addr: 0.0.0.0:4040

然后像这样运行ngrok:

ngrok http 3000 -config=/path/to/ngrok.conf
现在您可以使用以下地址从浏览器访问Web界面:http://vagrantip:4040http://vagranthostname:4040 例如,如果您的/etc/hosts配置如下,http://192.168.33.34:4040http://site.dev:4040 有关ngrok配置文件的更多信息,请参见此处:https://ngrok.com/docs#config

这是这个问题的最佳答案! - pedrostanaka
太棒了!那让我快疯了。 - Chad Caldwell
对于任何有疑问的人来说,ngrok并没有10亿种配置选项,这个答案基本上是完整的。 - Nathan Chappell
这应该是被接受的答案 - 被接受的那个并没有回答问题。 - Chupo_cro

6

更改您的配置nano ~/.ngrok2/ngrok.yml,添加以下内容:

web_addr: 0.0.0.0:4000

这将使您的 ngrok 仪表板对主机开放访问。


1
在你的 Vagrantfile 中添加以下行。
config.vm.network "forwarded_port", guest: 4040, host: 8080

然后你可以从主机系统访问http://localhost:8080http://127.0.0.1:8080。你可以参考Vagrant文档来获取帮助。

或者

使用命令进入你的虚拟机:

vagrant ssh vmname

使用ifconfig检查客户机的IP地址。Vagrant使用默认网络并为客户机分配一个IP地址,因此您可以使用该IP地址从主机访问Web界面http://vagrantip:4040
或者
您可以创建或分配公共或私有网络IP。请参考vagrant Networking

尝试了http://vagrantip:4040建议中的eth0(10.0.x.x)和eth1(192.168.x.x)IP地址,但它们都超时了。接下来我将尝试Vagrantfile建议;虽然这个会被git跟踪,并与团队共享。 - NotoriousWebmaster
4:tcp 0 0 127.0.0.1:4040 0.0.0.0:* LISTEN 10854/ngrok - NotoriousWebmaster
是的,我又翻了一遍ngrok文档,没有什么特别突出的东西。自定义域名是付费功能,而我还没有在那个服务上开通付费账户。接下来我打算看一下Vagrantfile。 - NotoriousWebmaster
就像我说的,我不了解ngrok,但你尝试过ngrok http 192.168.x.x:8080吗?如果需要帮助,请参考https://ngrok.com/docs#expose。 - pl_rock
感谢您的帮助,pl_rock。得到了ngrok开发者的协助,成功地让事情发生了。 - NotoriousWebmaster
显示剩余3条评论

0

(这是一条留给我未来自己和可能遇到类似问题的人的注释)

我正在使用Vagrant,并从主机的浏览器URL访问我的本地网站(这些网站在Vagrant中运行),例如https://my.local.site。我使用多个端口,每个端口指向不同的本地网站(例如,https://my.local.site:1111 指向site1,https://my.local.site:2222 指向site2等)。因此,要使ngrok与特定站点(假设为使用端口:1111的site1)配合使用,我只需要像这样从主机运行ngrok:

ngrok http my.local.site:1111

现在,在主机浏览器中,我可以使用 ngrok 链接来公开访问它,如下所示:

https://11-22-33-44-55.ngrok.io/people/person
# the above line will act as if I opened URL from browser https://my.local.site:1111/people/person

如果我想访问我的其他本地网站,我需要为每个端口以同样的方式运行多个ngrok(但请注意:ngrok免费帐户仅允许1个同时活动的代理)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接