通过隧道(使用 ngrok)将本地主机暴露到互联网:HTTP 错误 400:错误请求;无效的主机名

Exposing localhost to the internet via tunneling (using ngrok): HTTP error 400: bad request; invalid hostname

从问题的先前版本来看,有这样的内容:Browse website with ip address rather than localhost,它几乎概述了我到目前为止所做的事情......我已经让本地 IP 正常工作。然后我找到了ngrok,显然我不需要通过IP连接。


我想做的是将我在本地主机上 运行ning 的网站公开到互联网。我找到了一个可以做到这一点的工具:ngrok。

运行网站在visual studio,网站在localhost/port#启动。我在命令行中运行命令"ngrok http port#"。一切似乎都开始正常。我生成了几个 URL,并且 ngrok 检查 url (localhost:4040) 有效。

唯一的问题是,当我转到生成的 URL 时,我收到 HTTP 错误 400:错误的请求无效的主机名。这是一个与我 运行 "ngrok http wrongport#" 不同的错误,后者是未找到主机的错误...所以我认为发生了一些好事。我只是说不出什么...

在通过隧道服务将我的站点暴露给 Internet 时,我是否遗漏了一个步骤?如果有,我在 ngrok 文档中找不到它。

用 ngrok 解决这个问题。用 inconshrevable 的话来说,一些应用程序在看到与预期不同的主机 header 时会生气。

运行 以下命令应该可以解决问题:

ngrok http [port] -host-header="localhost:[port]"

这对我不起作用。 您可以执行以下操作:

对于 IIS Express

在 VS 2015 中: 转到项目中的 .vs\config\applicationhost.config 文件夹

在 VS 2013 及更早版本中: 转到 %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config

找到写着:

的绑定
<binding protocol="http" bindingInformation="*:5219:localhost" />

对我来说这是一个 运行ning 端口 5219

改为

  <binding protocol="http" bindingInformation="*:5219:" />

IIS Express 现在将接受该端口上的所有传入连接。

缺点:您需要 运行 IIS Express 作为管理员。

或者您可以在 Ngrok 中重写主机 header:

ngrok.exe http -host-header=rewrite localhost:5219

以下命令将解决问题

ngrok http -host-header=localhost 8080

步骤。

  1. 运行 控制台上的 ngrok.exe 目录命令。 ngrok http 端口即 ngrok http 80 https://www.screencast.com/t/oyuEPlR6Z Set

  2. Ngrok url 到您的应用。

它将为您的应用程序创建一个隧道。

谢谢。

对我来说最简单的事情就是使用 iisexpress-proxy + ngrok。

首先,我使用 npm

全局安装 iisexpress-proxy

npm install -g iisexpress-proxy

然后我用它代理我的本地主机。比如说我的网站是 运行ning on 3003.

iisexpress-proxy 3003 to 12345 其中 12345 是我要代理到的新 http 端口。

然后我就可以运行 ngrok了。

./ngrok.exe http 12345

它很管用!

但我认为它只适用于 http。现在我不使用 https 来测试,但即使它有效,通常也是一如既往的大量工作。

对于 https 这有效:

ngrok http https://localhost:<PORT> -host-header="localhost:<PORT>"

尝试使用 Global infrastructure > Locations

中的不同位置
ngrok http -region eu 8080

您可以使用位于 http://localhost:4040 的 ngrok 流量检查器发出请求并查看通过您的隧道的任何流量。

或在命令行中

ngrok http -region eu 8080 --log=stdout                                                                                                                                                 

如果一个区域失败,请尝试另一个区域。

ngrok 在世界各地的数据中心运行隧道服务器。给定区域内数据中心的位置可能会更改,恕不另行通知(例如,欧洲服务器可能会从法兰克福转移到伦敦)。

  • us - 美国(俄亥俄州)
  • eu - 欧洲(法兰克福)
  • ap - Asia/Pacific(新加坡)
  • au - 澳大利亚(悉尼)
  • sa - 南美洲(圣保罗)
  • jp - 日本(东京)
  • 在-印度(孟买)