60

使用任何类型的 Web 应用程序都是新手,我一直在尝试慢慢构建 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

但是,当我按照 Facebook 开发人员页面的要求获取地址“ https://ea986ca5.ngrok.io ”时,它会显示:

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.

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

4

20 回答 20

47

这对我有用

ngrok.exe http -host-header=rewrite localhost:<Your Port number>

例如:

ngrok.exe http -host-header=rewrite localhost:5219

我正在使用 Visual Studio 2017,不知道它是否会影响任何东西。

于 2017-03-28T12:00:13.357 回答
34

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

ngrok http 127.0.0.1:5000代替ngrok http 5000

祝你好运!

于 2018-10-09T15:06:43.607 回答
27

正如@njzk2 应该说的那样,如果您没有运行 Web 服务器,那么它就无法工作。如果您仍然感到困惑,我想让您更清楚。

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

于 2016-12-16T03:55:16.257 回答
24

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

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

(目前没有足够的代表对上述任何答案添加评论)

于 2020-06-09T10:23:49.087 回答
14

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

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

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

第 4 步 - 如果第 2 步成功完成,请在同一个终端(第 2 步)中粘贴您的 localhost 端口所在的行

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

第 5 步 - 复​​制在终端中生成的 URL,然后 waalla.. 你可以 ping 到它。


如果 <<<<Ngrok 错误 '502 bad gateway'>>>> 将 https 更改为 http,因此第 4 步将是 ngrok http http://localhost:44386 -host-header="localhost:44386"

于 2020-06-08T09:18:13.333 回答
9

尝试如下:

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

于 2019-03-06T02:29:11.010 回答
3

看来这个问题现在已经在最新版本的 ngrok 中解决了:https ://github.com/inconshreveable/ngrok/issues/448

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

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

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

于 2020-04-14T07:17:56.800 回答
2

就我而言,它是 Visual Studio 2017 .Net Core 2.1 中的项目,它被创建为使用带有自签名证书的 https。如果您不需要 localhost 是 https,那么为我解决的问题是创建一个新的 Web 项目并取消选中 https。当您运行 ngrok (ngrok http port-number-from-IISExpress) 时,它会为您提供可用于开发的 https url。

于 2019-02-15T17:38:42.690 回答
2

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

看到这个github问题评论:

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

于 2018-12-28T15:53:12.803 回答
1

因为这个,我几乎失去了一天,如果该功能没有运行,它不会只是启动虚拟主机。在启动 ngrok 之前,您需要在本地运行该函数

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

它为我工作

于 2021-08-02T10:52:17.147 回答
1

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

在我的情况下,我使用“ngrok HTTP 3002”运行 ngrok,而我的快速服务器在端口 5000 上运行,因此抛出 BAD GATEWAY 错误。

我在端口 5000 上重新启动了 ngrok,它就像一个魅力。

于 2021-03-03T01:04:13.563 回答
1

对我来说,将协议从切换httptls工作,因为我只转发安全连接。我不需要重写标题。

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

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

于 2018-07-30T14:08:59.843 回答
0

发生 502 网关错误,因为 ngrok 无法从 Localhost 接收任何响应。

需要做的事情是:

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

我所做的是

  • 在 8080 中启动了一个tomcat Web Server
  • 然后触发ngrok http 8080

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

于 2019-10-22T05:49:29.607 回答
0

我终于成功了

ngrok http 80 

然后在你的 localhost:80 上启动另一个服务......在我的例子中,我使用这些

php -S localhost:80

和反向壳的东西..

nc -nlvp 80

你的问题现在已经解决了。^_^

于 2022-03-05T11:43:52.653 回答
0

我必须输入我的服务器 IP 地址并且工作完美!

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

于 2020-08-17T23:21:21.700 回答
0

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

您可以为您的开发人员机器禁用此功能或添加基于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>
于 2017-09-17T06:54:19.433 回答
0

我必须同时使用(1)@user6483104 的答案和(2)使用我的项目中定义的不安全 URL (与ie. https相比)启动我的 ngrok 隧道SSL URL

在此处查看我的答案: 如何配置 Visual Studio 2017 以在 ASP.Net MVC https 站点中公开非加密端口

注意:如果我对默认的不安全 URL 有误,这个答案(如何在 Visual Studio 2017 Web Proj ASP.NET Core 2.0 中禁用 Https)声称有一个禁用安全 URL 的解决方案。我没有尝试,因为在我现有的项目中已经定义了一个不安全的 URL(我怀疑你的也有)

在此处输入图像描述

于 2018-02-24T16:42:52.503 回答
0

If you just with to use ngrok to intercept incoming data, and you do not have a local webserver for whatever reason, then you can use ncat.

nc -l 5000

This will create a process that listens on port 80.

So when used in combination with

ngrok http 5000

You will no longer get the '502 bad gateway' error.

于 2019-11-09T00:14:03.943 回答
0

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

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

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

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

于 2021-07-26T09:58:07.017 回答
0

我遇到过同样的问题,

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

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

于 2021-02-28T18:09:38.350 回答