- Whats is ngrok?
ngrok provides introspected tunnels to localhost.
ngrok is a reverse proxy that creates a secure tunnel from a public endpoint to a locally running web service.
Which translates to
"I want to expose a local server to the internet"
http://anyonecanaccess -> http://localhost
- Why would you want to use ngrok?
ngrok can be necessary for development and testing external services, such as Single Sign On, SAML, external APIs, Cloud solutions, etc
While you could pay for a domain and forward that to your development environment, that tends to be cost prohibitive and not overly practical given the nature of development and testing vms, containers, services, etc. Especially in a company environment where you do not have access to the routers/firewalls.
You can also use ngrok to quickly demo a local feature before deploying.
- How to use ngrok
To use ngrok, download and extract it to a directory
https://ngrok.com/download
C:/dev/ngrok
From a command prompt,
such as microsofts cmd or a more feature rich ConsoleZ
> ngrok http 80
Session Status online
Session Expires 7 hours, 4 minutes
Version 2.2.8
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://24f98db7.ngrok.io -> localhost:80
Forwarding https://24f98db7.ngrok.io -> localhost:80
Assuming you already have a web based application running on port 80 ie
http://localhost
you can access your local development environment via
http://24f98db7.ngrok.io
The '24f98db7' part is randomly generated every time you start an ngrok instance.
The free version doesn't require an account and allows for basic http/tcp tunnels, which tends to be sufficient for development. But the publicly exposed url is limited to 8 hours. You can also create a free account for more resources if needed.
The paid versions of ngrok allow for End-to-End TLS Tunnels, Reserved domains, Reserved TCP addresses, more connections / minute, more tunnels/ngrok process, etc.
If your local development application runs on a custom local domain name such as myawesomeapp.local, you can use that with ngrok instead of localhost
> ngrok http myawesomeapp.local:80
Session Status online
Session Expires 7 hours, 4 minutes
Version 2.2.8
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://8316dcb8.ngrok.io -> myawesomeapp.local:80
Forwarding https://8316dcb8.ngrok.io -> myawesomeapp.local:80
Note: Unlike .local, .test, and .example, .dev is not on a list of specially protected names.
in 2017, Chrome forces connections to all domains ending in .dev (as well as .foo) to use HTTPS
reference: theregister goole dev network
You can also add basic password protection to your exposed application
> ngrok http -auth "user:password" myawesomeapp.local:80
To stop ngrok just press ctrl + c
ngrok away
-End of Document-
Thanks for reading