Ngrok错误Ƕ 502坏网关'

时间:2016-11-14 21:51:27

标签: https ngrok http-tunneling

使用任何类型的Web App的东西都很新,而且我一直试图慢慢构建一个Facebook Messenger Bot。当我尝试使用ngrok时,我无法访问我给出的地址,即:

ngrok http 5000

是我在命令行中输入的内容,它将返回此内容:

ngrok by @inconshreveable

Session Status                online
Version                       2.1.18
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://ea986ca5.ngrok.io -> localhost:5000
Forwarding                    https://ea986ca5.ngrok.io -> localhost:5000

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

但是当我拿到地址' https://ea986ca5.ngrok.io'正如Facebook开发者所要求的那样,它说:

The connection to http://ea986ca5.ngrok.io was successfully tunneled to your
ngrok client, but the client failed to establish a connection to the local  
address localhost:5000.


Make sure that a web service is running on localhost:5000 and that it is a 
valid address.


The error encountered was: dial tcp [::1]:5000: connectex: No connection 
could be made because the target machine actively refused it.

我的本​​地端口有问题吗?谢谢!

19 个答案:

答案 0 :(得分:14)

这对我有用

ngrok.exe http -host-header =重写localhost:

例如ngrok.exe http -host-header =重写localhost:5219

我正在使用visual studio 2017,不知道它是否会产生影响。

答案 1 :(得分:13)

正如@ n​​jzk2应该说的那样,如果你没有运行一个Web服务器,那么它就无法运行。如果你仍然感到困惑,我想让你更清楚。

ngrok 的作用是使您的本地服务器(在localhost上运行)可用于外部世界(互联网的其余部分)。就其本身而言,它不是Web服务器。因此,对于您的bot开发,您需要在定义的端口上运行Web服务器(在您的情况下为5000)。然后,您可以将ngrok指向此端口,以便将发送到您的公共地址的请求重定向到在该端口上运行的程序。 然后,Web服务器将接受并处理来自Facebook的请求

答案 2 :(得分:7)

我发现必须删除-host-header部分周围的引号,才能使其与最新的ngrok版本(2.3.35)一起使用:

ngrok http https://localhost:5001 -host-header=localhost:5001

(目前代表不足以对以上任何答案添加评论)

答案 3 :(得分:4)

步骤1-注册到ngrok并在仪表板页面中下载.exe文件

第2步-打开终端,并从仪表板复制并粘贴不带./

的行

第3步-运行您的本地主机

第4步-如果第2步成功完成,则将localhost端口粘贴到同一终端(第2步)中

ngrok http https:// localhost:44386 -host-header =“ localhost:44386”

第5步-复制在终端和waalla中生成的URL。您可以对其进行ping操作。


如果<<<< Ngrok错误'502错误的网关'>>>>将https更改为http,则步骤4将为ngrok http http:// localhost:44386 -host-header =“ localhost:44386”

答案 4 :(得分:1)

确保服务器监听 NGROK 隧道所在的同一端口

在我的例子中,我使用“ngrok HTTP 3002”运行 ngrok,而我的 express 服务器运行在端口 5000,因此抛出 BAD GATEWAY 错误。

我在端口 5000 上重新启动了 ngrok,它的工作非常出色。

答案 5 :(得分:1)

如果您尝试使用ngrok指向https localhost URL,请设置代理。

查看此github问题评论:

https://github.com/inconshreveable/ngrok/issues/448#issuecomment-414214242

答案 6 :(得分:1)

在我的情况下,这是Visual Studio 2017中的项目.Net Core 2.1被创建为使用带有自签名证书的https。如果您不需要将本地主机设为https,那么对我来说固定的是创建一个新的Web项目并取消选中https。当您运行ngrok(ngrok http port-number-from-IISExpress)时,它会为您提供可用于开发的https url。

答案 7 :(得分:1)

尝试如下:

ngrok http 127.0.0.1:8080 -host-header="127.0.0.1:8080"

答案 8 :(得分:1)

该问题似乎已经在最新版本的ngrok中得到解决:https://github.com/inconshreveable/ngrok/issues/448

基本上,您要做的是指定您正在使用https,如下所示:

ngrok http https://localhost:54321 -host-header="localhost:54321"

至少,这为我解决了这个问题。将54321替换为您的实际端口号。

答案 9 :(得分:0)

我因此损失了将近一天,如果该功能没有运行,它不会启动虚拟主机。启动ngrok前需要在本地运行该函数

https://docs.microsoft.com/en-us/azure/azure-functions/functions-debug-event-grid-trigger-local

它为我工作

答案 10 :(得分:0)

我已经通过终止进程解决了这个问题。只允许 4 个进程。

第一个命令 top 来查看您的流线型进程。你会看到:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

只需输入 kill PID [PID VALUE] 并重新运行单元格。

答案 11 :(得分:0)

我遇到了同样的问题,

因为,我忘了运行 localhost:3000 端口,它应该运行某个节点服务器。

在我运行节点服务器之后,然后我运行,ngrok http 3000,以便它将在 ngrok 中将该节点服务器云化,以便在互联网上进行全局访问。

答案 12 :(得分:0)

我不得不输入服务器的IP地址,并且运行完美!

./ ngrok http [ip服务器]:5000

答案 13 :(得分:0)

如果仅用于使用ngrok拦截传入的数据,并且由于某种原因而没有本地网络服务器,则可以使用ncat

nc -l 5000

这将创建一个监听端口80的进程。

因此,当与

结合使用时

ngrok http 5000

您将不再收到“ 502错误的网关”错误。

答案 14 :(得分:0)

由于ngrok无法从Localhost接收任何响应,所以发生502网关错误。

需要做的事情是:

  1. 在端口中启动Web服务器
  2. 在该端口中触发ngrok命令。

我所做的是

  • 在8080年启动了 tomcat Web服务器
  • 然后触发 ngrok http 8080

它真的很酷...
试试这个...
希望它对您有用。

答案 15 :(得分:0)

尝试显式设置本地主机IP:

ngrok http 127.0.0.1:5000而不是ngrok http 5000

祝你好运!

答案 16 :(得分:0)

对我来说,将协议从http切换到tls是可行的,因为我仅转发安全连接。我不需要重写标题。

仅出于上下文考虑,我将连接转发到Ubuntu 16上正在运行的docker容器。

PS:您仍然在浏览器中使用https而不是tls访问该地址。

答案 17 :(得分:0)

如果您有HTTP规则将HTTP重定向到HTTPS,则会发生此错误。

您可以为开发者计算机禁用此功能,也可以根据X-Original-Host标题添加自定义规则:

我正在使用IIS重写插件,这就是我修复它的方式

 <rule name="Redirect to https" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
            <match url=".*" negate="false" />
            <conditions logicalGrouping="MatchAll">
              <add input="{HTTPS}" pattern="off" />

              <add input="{HTTP_X_Original_Host}" pattern="yourngrokname.ngrok.io" negate="true" />             

            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Found" />
          </rule>

答案 18 :(得分:-1)

我必须同时使用(1)@ user6483104的答案(2)使用项目中定义的不安全的URL 启动我的ngrok隧道(vs { {1}} 即.https )。

请在此处查看我的回答: How to configure Visual Studio 2017 to expose a non-encrypted port in a ASP.Net MVC https site

注意:如果我错误地存在默认的不安全网址,则此答案(How To Disable Https in Visual Studio 2017 Web Proj ASP.NET Core 2.0)声称有解除禁用安全网址的解决方案。我没有尝试过,因为在我现有的项目中已经定义了一个不安全的URL(因为我怀疑你的网站也是如此)

enter image description here