Exposing localhost server to the internet in one minute

Lean how to use ngrok to expose your local server to the internet.

July 23, 2018 - 2 minute read -
deployment server ngrok

Sometimes, we found a situation due to multiple reasons, where we need to expose our local server to internet, maybe we need to show our website to a client and doesn’t have enough time for deploying, others, we need to test it out a webhook from a third service and we don’t want to create a new deployment just for testing purpose.

So, let’s go for it.


There services that offer you to set up a tunnel between their servers and your local machine. There are several of them, nevertheless, my recommendation is ngrok.

It has a freemium model, it fits the most basic requirements.

How it works

We download and run a program(ngrok), specifying which port is our local server listening to. ngrok will connect to their external cloud service, creating a public endpoint redirecting all the traffic from it to your server. That’s it, simple.

Download and setup

  1. Download it from official site
  2. Unzip /path/to/ngrok.zip into any folder
  3. Start an HTTP tunnel in any port you want. Let’s do it on 80
$ ./ngrok http 80 # this command should be run from where ngrok was unzipped
Web Interface       
Forwarding                    http://82330e5b.ngrok.io -> localhost:80
Forwarding                    https://82330e5b.ngrok.io -> localhost:80

That’s it. We just need to run our web server in port 80 and starting to receive traffic.

If you want to test it out. You may send a request using curl to our public ngrok domain, http://82330e5b.ngrok.io. Additionally, ngrok allows https connections, this is a great feature when we are testing external services.

Note: remember you need to have your local server running on port 80 (for this example).

$ curl -v http://82330e5b.ngrok.io

You can check all requests details using built-in dashboard for ngrok at http://localhost:4040

That’s all. For some people, it could look like a trivial task, but for beginners, this is a starting point.

If you like, please share.

Disclosure: This is for testing purpose, if you are handling sensitive data, avoid using this method because all your traffic is going to pass through a third service.–