通过隧道将本地主机暴露给internet(使用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 wrongport#”,这是一个主机没有发现错误…所以我觉得有好事发生了。我就是不知道…

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

132687 次浏览

用ngrok解决这个问题。用不可思议的话来说,当一些应用程序看到与预期不同的主机头时,它们会生气。

运行以下命令可以解决这个问题:

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

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

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" />

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

改为

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

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

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

或者你可以用Ngrok重写主机头文件:

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设置

  2. Ngrok url到你的应用程序。

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

谢谢。

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

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

npm install -g iisexpress-proxy

然后我用它代理我的本地主机。例如,我的站点运行在3003上。

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

然后我就可以查了。

./ngrok.exe http 12345

它就是有用!😃

但我认为它只适用于http。现在我不使用https来测试,但即使它工作,通常它还是像往常一样有很多工作要做。

对于https,这是有效的:

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

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

ngrok http -region eu 8080

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

命令行

ngrok http -region eu 8080 --log=stdout

如果一个地区失败了,那就在另一个地区试试。

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

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

对于https,这是有效的:

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

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

ngrok config edit

yaml用于本地主机设置的示例(client &服务器):

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文件中声明的所有配置打开一个隧道

最新版本的更新命令

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

使用--代替-

ngrok http --host-header=localhost 8080

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

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

  2. 执行命令ngrok http 127.0.0.1:173——region=eu——hostname=yourcustomdomain.eu.ngrok.io

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