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

don*_*lan 186 asp.net iis-express asp.net-web-api visual-studio-2012 ngrok

从以前版本的问题,有这样的:浏览网站的IP地址而不是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文档中找不到它.

don*_*lan 486

ngrok麻烦了这个问题.用不可理解的话来说,一些应用程序在看到不同于预期的主机头时会生气.

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

ngrok http [port] -host-header="localhost:[port]"
Run Code Online (Sandbox Code Playgroud)

但是,这可能不是一个全面的解决方案(显然至少有一个不同的情况会导致这个问题),所以请查看其他答案

  • 如果在https而不是http上使用local,则上述版本适用:`ngrok http https:// localhost:44362 -host-header =“ localhost:44362”` (8认同)
  • 谢谢,它在 2022 年仍然有效。就像 --host-header=whatever 一样 (3认同)
  • 谢谢。我以前遵循了Devin Rader的指示,在这里进行了详细说明,但是现在这使这种方式更容易。https://www.twilio.com/blog/2014/03/configure-windows-for-local-webhook-testing-using-ngrok.html (2认同)
  • 不能这样就足够了!对于所有复杂和错误的说明来破解你的IISExpress绑定和网络设置,这就像一把热刀穿过黄油一样. (2认同)
  • 哇,我浪费了将近 2 个小时来解决这个问题。我唯一的问题是我在 -host-header 中添加了 https。像这样:`ngrok http https://localhost:44392 -host-header="https://localhost:44392"` 从 -host-header 参数中删除 https:// 解决了我的问题。谢谢 (2认同)

小智 40

以下命令将解决问题

ngrok http -host-header=localhost 8080
Run Code Online (Sandbox Code Playgroud)

  • 如果使用 ASP.NET Core,您还应该在 Startup 类中注释掉 `app.UseHttpsRedirection()` 以避免 307 临时重定向。 (9认同)

Ste*_*vds 35

这不适合我.你可以做以下事情:

对于IIS Express

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

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

找到说的绑定:

<binding protocol="http" bindingInformation="*:5219:localhost" />
Run Code Online (Sandbox Code Playgroud)

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

改为

  <binding protocol="http" bindingInformation="*:5219:" />
Run Code Online (Sandbox Code Playgroud)

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

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

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

ngrok.exe http -host-header=rewrite localhost:5219
Run Code Online (Sandbox Code Playgroud)


xqt*_*qtr 16

对于https这个作品:

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


Joh*_*man 9

更新了最新版本的命令

测试用: (Windows) (ngrok v3.0.5)

使用--而不是-

ngrok http --host-header=localhost 8080