【问题标题】:Exposing localhost to the internet via tunneling (using ngrok): HTTP error 400: bad request; invalid hostname通过隧道(使用 ngrok)将 localhost 暴露到 Internet:HTTP 错误 400:错误请求;无效的主机名
【发布时间】:2015-08-12 15:50:21
【问题描述】:

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


我想要做的是将我在 localhost 上运行的网站暴露给互联网。我找到了一个可以做到这一点的工具:ngrok。

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

唯一的问题是,当我转到生成的 URL 时,我收到 HTTP 错误 400:错误的请求无效的主机名。这是一个与我运行“ngrok http wrongport#”时不同的错误,这是一个找不到主机的错误......所以我认为正在发生一些好事。我就是不知道是什么...

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

【问题讨论】:

  • 整个过程总结here。也许这会有所帮助。

标签: asp.net visual-studio-2012 asp.net-web-api iis-express ngrok


【解决方案1】:

尝试与Global infrastructure > Locations不同的位置

ngrok http -region eu 8080

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

OR 在命令行中

ngrok http -region eu 8080 --log=stdout                                                                                                                                                 

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

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

  • 我们 - 美国(俄亥俄州)
  • 欧盟 - 欧洲(法兰克福)
  • ap - 亚太地区(新加坡)
  • 澳大利亚 - 澳大利亚(悉尼)
  • sa - 南美洲(圣保罗)
  • jp - 日本(东京)
  • 在 - 印度(孟买)

【讨论】:

    【解决方案2】:

    对于https 这有效:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 谢谢。我之前遵循了此处详细介绍的 Devin Rader 的说明,但现在这使这种方式更容易了。 twilio.com/blog/2014/03/…
      • 如果您在将另一个绑定添加到 applicationHost.config (vs2015/iisexpress) 时遇到问题,此解决方案也适用。您无需添加一个,只需使用此答案即可。最后,如果您为自定义域付费以避免每次都更改地址,只需在上面的答案中添加 -subdomain=mysubdomain。
      • 对此赞不绝口!对于破解 IISExpress 绑定和网络设置的所有复杂且错误的指令,这就像一把热刀切开黄油。
      • 当本地使用 https 而不是 http 时,上面的这种变体有效:ngrok http https://localhost:44362 -host-header="localhost:44362"
      • 哇,我浪费了将近 2 个小时来弄清楚这一点。我唯一的问题是我在 -host-header 中添加了 https。像这样:ngrok http https://localhost:44392 -host-header="https://localhost:44392" 从 -host-header 参数中删除 https:// 解决了我的问题。谢谢
      【解决方案4】:

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

      首先我使用 npm 全局安装 iisexpress-proxy

      npm install -g iisexpress-proxy

      然后我用它代理我的本地主机。比如说我的网站在 3003 上运行。

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

      然后我可以在上面运行 ngrok。

      ./ngrok.exe http 12345

      它只是工作! ?

      但我认为它只适用于http。目前我不使用https 进行测试,但即使它有效,通常它还是一如既往的大量工作。

      【讨论】:

        【解决方案5】:

        步骤。

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

        2. Ngrok 网址到您的应用程序。

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

        谢谢。

        【讨论】:

          【解决方案6】:

          以下命令将解决问题

          ngrok http -host-header=localhost 8080
          

          【讨论】:

          • 如果使用 ASP.NET Core,您还应该在 Startup 类中注释掉 app.UseHttpsRedirection() 以避免 307 临时重定向。
          • 由于某种原因,接受的答案对我不起作用,这个解决方案可以。谢谢!
          【解决方案7】:

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

          对于 IIS Express

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

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

          找到以下内容的绑定:

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

          对我来说,这是一个在 5219 端口上运行的项目

          改成

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

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

          缺点:您需要以管理员身份运行 IIS Express。

          或者你可以在 Ngrok 中重写主机头:

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

          【讨论】:

          • 这是在 ngrok 中重写 header 的正确方法。其他答案均无效。已经将 IIS 设置为任何主机名,但是 ngrok 在使用 -host-header="localhost:8892" 时返回“主机名无效”但是这个重写版本立即起作用。
          猜你喜欢
          • 2015-08-17
          • 2019-05-10
          • 1970-01-01
          • 2019-09-29
          • 2019-11-30
          • 2014-03-29
          • 1970-01-01
          • 1970-01-01
          • 2016-10-20
          相关资源
          最近更新 更多