Ngrok错误'502 bad gateway'。

72

我对使用任何网络应用程序都很陌生,最近一直在尝试缓慢地构建一个Facebook Messenger机器人。但是当我尝试使用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.

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


1
你能够实际访问 localhost:5000 吗? - njzk2
既然你提到了,我不能做什么?为什么? - Jordan Cagney
你是否有一个在该端口上监听的服务器? - njzk2
我是不是最好使用正在监听的端口? - Jordan Cagney
对我来说,使用ngrok总是出现问题。最终决定测试Marcel(Beyond Code)的Expose纯PHP应用程序。太棒了!安装简单,而且它只需要运行即可。 - s3c
显示剩余2条评论
24个回答

55

这对我有用

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

e.g:

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

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


37
我也必须明确指定本地https。即ngrok http https://localhost:8080 -host-header="localhost:8080" - farlee2121
这是我的命令(Windows 10):ngrok http 5000 -host-header = rewrite --subdomain <blah> - Daniel Williams

50

尝试明确设置本地主机IP地址:

ngrok http 127.0.0.1:5000 而不是 ngrok http 5000

祝好运!


6
哇,我希望我能够一遍又一遍地点赞......这真是救了我。 - Kenny Dabiri

30

正如 @njzk2 所说,如果您没有运行 Web 服务器,则无法使用。我想向您更清楚地解释,如果您还是困惑的话。

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


24
我发现我必须删除-host-header部分周围的引号,才能使它与最新版本的ngrok一起正常工作(2.3.35): ngrok http https://localhost:5001 -host-header=localhost:5001 (目前没有足够的声望在上面任何答案中添加评论)

14

步骤1 - 注册ngrok并在控制台页面下载.exe文件

步骤2 - 打开终端并从控制台复制并粘贴不带 ./ 的行

步骤3 - 运行本地主机

步骤4 - 如果步骤2成功完成,请在同一终端(步骤2)中粘贴您的本地主机端口行

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

步骤5 - 复制在终端中生成的URL,然后您就可以对其进行ping操作。


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


2
你是我的英雄 :"))) - KaMaHe

10

尝试以下操作:

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


5
您的答案接近正确,但对我仍然不起作用。您建议进行小幅修改后,ngrok http https://localhost:44398 -host-header="localhost:44398"就可运行。 - Rahul Bagal

3

最新版本的ngrok似乎已经解决了这个问题:https://github.com/inconshreveable/ngrok/issues/448

基本上,您要做的是像这样指定您正在使用https:

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

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


2
在我的情况下,使用Visual Studio 2017创建了一个.Net Core 2.1项目,并使用自签名证书来使用https。如果您不需要将localhost设置为https,则可通过创建新的Web项目并取消勾选https来解决此问题。当您运行ngrok(ngrok http port-number-from-IISExpress)时,它会提供一个https网址供您进行开发。"最初的回答"。

2

1
对我来说,将协议从http切换到tls是有效的,因为我只转发安全连接。我不需要重写头文件。
仅作为背景,我正在将连接转发到运行在Ubuntu 16上的docker容器。
PS:在浏览器中仍然使用https访问地址,而不是tls。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接