Ngrok 隧道 https 通过配置

Posted

技术标签:

【中文标题】Ngrok 隧道 https 通过配置【英文标题】:Ngrok tunnel https via config 【发布时间】:2021-04-16 20:36:23 【问题描述】:

我在寻找如何正确编写我的 ngrok.yml 文件以便它将使用 https 启动隧道时遇到一些问题。我目前拥有的如下:

tunnels:
  invenutory:
    proto: http
    addr: 44328
    host_header: localhost

这里的问题是,如果我使用 ngrok 给我的 url,它不会连接(我通过查看它是否命中我的 healthcheck 端点来测试它,它没有)。但是,如果我使用以下命令启动 ngrok: ngrok http https://localhost:44328 -host-header="localhost:44328" 然后它会正确地到达我的端点。如何使我的配置文件以相同的方式运行?

编辑:

如果我将addr 设置为addr: "https://localhost:44328",那么它确实可以正确使用https,但由于某种原因,这在我看来是一种不正确的做法。

【问题讨论】:

IMO 您需要将端口号添加到host_header 值:host_header: localhost:44328。在文档的示例中,使用的端口是默认端口,因此不需要它们。在您的命令行中,您还指定host:port 而不仅仅是host。 Quote: 请求中的“Host”标头字段提供来自目标URI的主机和端口信息 我确实尝试将 host_header 设置为那样,但看起来 ngrok 隧道的 https 和 http 仍然只映射到 http,而不是 http 转到 http 和 https 转到 https。拥有免费帐户是否有限制? 我明白了。我不确定免费帐户,但它看起来不像。 我想现在还可以,我在编辑中发布的解决方法应该足以满足我现在的需求 【参考方案1】:

要使用 ngrok http 隧道启动仅 https 隧道,请使用标志 -bind-tls

这与你如何使用addr 无关,它可以用来让 ngrok 知道你的本地服务器是在监听 http 还是 https。

来自docs:

ngrok 假设它转发到的服务器正在侦听未加密的 HTTP 流量,但如果您的服务器正在侦听加密的 HTTPS 流量怎么办?您可以使用 https:// 方案指定 URL,以请求 ngrok 向您的本地服务器发送 HTTPS。

【讨论】:

【参考方案2】:

您可以将bind_tls 标志添加到配置文件中,以根据docs 仅创建HTTPS 隧道

tunnels:
  invenutory:
    proto: http
    addr: 44328
    host_header: localhost
    bind_tls: true

【讨论】:

以上是关于Ngrok 隧道 https 通过配置的主要内容,如果未能解决你的问题,请参考以下文章

启动 ngrok HTTP 隧道,但只转发到 HTTP 或 HTTPS,而不是两者

Ngrok通过config文件内置文件服务器配置

远程连接树莓派-ngrok

如何调试 ngrok 隧道暴露的远程 JVM

Ngrok 没有正确地隧道 Nginx

用于 asp.net 核心应用程序的 ngrok 和 https 隧道