通过隧道(使用 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
步骤。
运行 控制台上的 ngrok.exe 目录命令。 ngrok http
端口即 ngrok http 80 https://www.screencast.com/t/oyuEPlR6Z Set
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 - 日本(东京)
- 在-印度(孟买)
从问题的先前版本来看,有这样的内容: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
步骤。
运行 控制台上的 ngrok.exe 目录命令。 ngrok http 端口即 ngrok http 80 https://www.screencast.com/t/oyuEPlR6Z Set
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 - 日本(东京)
- 在-印度(孟买)