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



从以前的版本的问题,有这个:浏览网站与ip地址,而不是本地主机,这大致概述了我所做的到目前为止…我已经有了本地的IP。然后我找到了ngrok,显然我不需要通过IP连接。


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

在visual studio中运行网站,网站在localhost/port#上启动。我在命令行中运行命令"ngrok http port#"。一切似乎都很顺利。我生成了两个url,并且ngrok检查url (localhost:4040)工作正常。

唯一的问题是,当我去生成的url,我得到一个HTTP错误400:错误的请求无效的主机名。这是一个不同的错误,当我运行"ngrok http错误端口#",这是一个主机未发现错误…所以我觉得有好事发生了。我只是不知道…

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

使用ngrok解决此问题。用不可调和的话说,当一些应用程序看到与预期不同的主机头时,它们会生气。

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

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

根据版本的不同,您可能还想尝试:

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

下面的命令将修复这个问题

ngrok http -host-header=localhost 8080

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

For IIS Express

VS 2015:进入项目的.vsconfigapplicationhost.config文件夹

在VS 2013及更早版本中:转到%USERPROFILE%My DocumentsIISExpressconfigapplicationhost.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

对于https这是有效的:

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

最新版本的更新命令

测试条件: (Windows) (ngrok v3.0.5)

--代替-

ngrok http --host-header=localhost 8080

对我来说最简单的就是使用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测试,但即使它的工作,通常它是大量的工作一如既往。

https如此:

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

首先打开ngrok配置YAML文件,从终端运行:

ngrok config edit

本地主机设置(客户端&服务器):

version: "2"
authtoken: {YOUR_AUTH_TOKEN_FROM_NGROK_WEBSITE}
tunnels:
 client:
  addr: 3000
  proto: http
  host_header: localhost
 server:
  addr: 4000
  proto: http
  host_header: localhost

根据客户端和服务器端端口保存配置文件,并执行以下命令:

ngrok start --all

这将使ngrok为yaml文件中声明的所有配置打开一个隧道

尝试从全局基础设施的不同位置>位置

ngrok http -region eu 8080

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

命令行

ngrok http -region eu 8080 --log=stdout                                                                                                                                                 

如果一个区域失败了,再尝试另一个

ngrok在全球数据中心运行隧道服务器。数据中心在给定区域内的位置可能会在不通知的情况下发生变化(例如,欧洲服务器可能会从法兰克福转移到伦敦)。

  • us -美国(俄亥俄州)
  • 欧盟-欧洲(法兰克福)
  • ap -亚洲/太平洋(新加坡)
  • au - Australia (Sydney)
  • sa -南美洲(圣保罗)
  • jp -日本(东京)
  • 印度(孟买)

有IIS Express .net web API,已经在docker中安装了NGROK (windows作为主机)有"不好的请求";错误,下一个命令为我工作:

docker run -it -e NGROK_AUTHTOKEN=<token> ngrok/ngrok --host-header=localhost:21852  http host.docker.internal:21852

正如我后来所理解的,——host-header需要,因为IIS Express拒绝来自外部的所有请求(必须是"localhost:port)), host.docker.internal我使用的不是localhost,因为NGROK在docker内部运行,而IIS Express在windows主机上运行。

我遇到了同样的问题,并使用了以下解决方案:

  1. 确保您的应用程序绑定在IIS设置为所有未分配的IP地址

  2. 运行ngrok HTTP 127.0.0.1:173 --region=eu --hostname=yourcustomdomain.eu.ngrok.io

就是这样。完美的工作。此解决方案也适用于付费专业帐户

步骤。

  1. 从ngrok.exe目录在控制台上运行命令。ngrok http设置

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

谢谢。

最新更新