问题
Quite new to using any sort of Web App stuff, and I've been trying to slowly build a Facebook Messenger Bot. When I try to use ngrok I can't visit the address I'm given, i.e:
ngrok http 5000
is what I'm putting in the command line, and it's returning this:
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
But when I take the address 'https://ea986ca5.ngrok.io' as is required by the Facebook developer's page, it says:
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.
Is it a problem with my local port? Thanks!
回答1:
Just as @njzk2 should have said, if you don't have a web server running so it cannot work. I would like to make it clearer to you, if you are still confused.
What ngrok does, is to make your local server (running on localhost) to be available to the outside world (rest of the internet). On its own, it is not a web server. So for your bot development you need to have a web server running on a defined port (which in your case is 5000). Then you can point ngrok to this port so that it will redirect requests sent to your public address to the program running on that port. The web server will then accept and handle requests from Facebook
回答2:
This worked for me
ngrok.exe http -host-header=rewrite localhost:
e.g ngrok.exe http -host-header=rewrite localhost:5219
Im using visual studio 2017 dont know if it effects anthing.
回答3:
Try like below:
ngrok http 127.0.0.1:8080 -host-header="127.0.0.1:8080"
回答4:
If you are trying to use ngrok to point to an https localhost url, set up a proxy.
see this github issue comment:
https://github.com/inconshreveable/ngrok/issues/448#issuecomment-414214242
回答5:
In my case, it was the project in Visual Studio 2017 .Net Core 2.1 was created to use https with a self-signed certificate. If you don't need your localhost to be https, then what fixed it for me was creating a new web project and unchecking https. When you run ngrok (ngrok http port-number-from-IISExpress) it provides you with an https url you can use for development.
回答6:
Try to explicitly set the localhost IP:
ngrok http 127.0.0.1:5000
instead of ngrok http 5000
Good luck!
回答7:
This error can occur if you have an HTTP rule to redirect HTTP to HTTPS.
You can disable this for your developer machine or add a custom rule based on the X-Original-Host
header:
I'm using the IIS rewrite plug-in and this is how I fixed it
<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>
回答8:
For me, switching the protocol from http
to tls
worked since I am forwarding only a secure connection. I didn't need to rewrite the header.
Just for context, I am forwarding a connection to a running docker container on Ubuntu 16.
PS: You still access the address using https in the browser, not tls.
回答9:
502 gateway error occurs because ngrok not able to receive any reponse from Localhost.
The things need to be done is :
- Start a webserver in a Port
- Trigger ngrok command in that Port.
What I have done is
- Started a tomcat Web Server in 8080.
- Then Triggered ngrok http 8080.
It works really cool ...
Try this .....
Hope it works for You .
回答10:
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.
回答11:
I had to use both (1) the answer from @user6483104 and (2) start my ngrok tunnel using the unsecured URL defined in my project (vs the SSL URL
ie. https).
See my answer here: How to configure Visual Studio 2017 to expose a non-encrypted port in a ASP.Net MVC https site
Note: If I'm wrong about there being a default unsecured URL, this answer (How To Disable Https in Visual Studio 2017 Web Proj ASP.NET Core 2.0) claims to have a solution for disabling the secured URL. I didn't try it because there was already an unsecured URL defined in my existing project (as I suspect there is with yours as well)
来源:https://stackoverflow.com/questions/40598428/ngrok-errors-502-bad-gateway