Skip to main content

Command Palette

Search for a command to run...

Understanding Nginx and Cloudflare Tunnel: Securely Expose Services Without Needing Public IPs

Updated
5 min read

Introduction

For years, exposing a backend service to the internet meant one thing:
a public IP + a reverse proxy.

That’s where Nginx became the default choice.
But today, the internet has changed—zero trust, NAT, CGNAT, dynamic IPs, and security threats are the new normal.

This is where Cloudflare Tunnel flips the entire model.

This post explains:

  • How Nginx and Cloudflare Tunnel actually work

  • Why Cloudflare Tunnel is better in many modern setups

  • How tunneling makes private services public without opening ports

  • How to install Cloudflare Tunnel

  • Real limitations and when not to use it

No marketing fluff. Just engineering truth.


What Nginx Is (Traditional Model)

Nginx is a:

  • Web server

  • Reverse proxy

  • Load balancer

Typical Nginx Architecture

Internet → Public IP → Firewall (80/443 open) → Nginx → App

What Nginx Does Well

  • Terminates SSL

  • Routes traffic to services

  • Handles load balancing

  • High performance & battle-tested

But There’s a Catch

To use Nginx, you must:

  • Own a public IP

  • Open ports 80/443

  • Maintain firewall rules

  • Secure the server yourself

  • Handle DDoS & bot traffic manually

This model worked great before CGNAT, cloud sprawl, and zero-trust security.


What Cloudflare Tunnel Is (Modern Model)

Cloudflare Tunnel completely reverses the direction of connectivity.

Instead of the internet connecting to your server,
your server connects out to Cloudflare.

Cloudflare Tunnel Architecture

Local App → cloudflared → Encrypted Tunnel → Cloudflare Edge → Public Domain

Key idea:

No inbound traffic ever touches your server directly


How Cloudflare Tunnel Works (Deep Explanation)

Step-by-step Connection Flow

  1. cloudflared daemon starts

    • Runs on your local machine or server
  2. Outbound TLS connection

    • cloudflared opens multiple encrypted outbound connections

    • Connects to nearest Cloudflare data center

  3. Tunnel Registration

  4. User hits your domain

    • DNS → Cloudflare Edge

    • Cloudflare routes traffic through the tunnel

  5. Traffic reaches localhost

No port forwarding
No public IP
No NAT issues

This works even behind:

  • CGNAT

  • Office firewalls

  • Mobile hotspots


Nginx vs Cloudflare Tunnel (Side-by-Side)

FeatureNginxCloudflare Tunnel
Requires public IP✅ Yes❌ No
Open inbound ports✅ Required❌ Never
SSL setupManualAutomatic
DDoS protectionManualBuilt-in
Works behind CGNAT❌ No✅ Yes
Zero Trust ready❌ No✅ Yes
Infra maintenanceHighVery low
CostServer + OpsFree (core)

Why Cloudflare Tunnel Is Better (Reality-Based)

1. Security by Default

  • No exposed IP

  • No port scanning

  • No brute-force attacks

  • No SSH exposure

Your server becomes invisible to the internet.


2. Zero Trust > VPN

Instead of:

  • VPN

  • WireGuard

  • OpenSSH

You get:

  • Identity-based access

  • Email / GitHub / Google login

  • Device policies

This is how modern companies replace VPNs.


3. Perfect for Developers

  • Local APIs

  • Admin dashboards

  • Internal tools

  • Microservices

  • Staging environments

No more:

“It works on my machine but DNS is broken”


How to Install Cloudflare Tunnel

1️⃣ Install cloudflared

curl -fsSL https://developers.cloudflare.com/cloudflare-one/static/install.sh | sudo bash

Verify:

cloudflared --version

2️⃣ Authenticate

cloudflared tunnel login
  • Browser opens

  • Select your domain

  • Machine gets trusted


3️⃣ Create Tunnel

cloudflared tunnel create myapp

4️⃣ Map Domain to Tunnel

cloudflared tunnel route dns myapp api.example.com

5️⃣ Configure Routing

tunnel: myapp
credentials-file: ~/.cloudflared/<tunnel-id>.json

ingress:
  - hostname: api.example.com
    service: http://localhost:3000
  - service: http_status:404

6️⃣ Run Tunnel

cloudflared tunnel run myapp

Your local app is now publicly available on HTTPS.


How Cloudflare Makes It “Public” Without Public IP

This is the key mental model shift:

Old InternetNew Internet
Server exposes itselfServer stays private
DNS → IPDNS → Cloudflare
Client hits your serverClient hits Cloudflare
You protect infraCloudflare protects infra

Cloudflare acts as:

  • Reverse proxy

  • Firewall

  • Identity gateway

  • CDN

  • Load balancer

All before traffic reaches you.


Cons of Using Cloudflare Tunnel (Important)

Let’s be honest—this is not magic.

❌ Vendor Lock-in

  • Your traffic depends on Cloudflare

  • If Cloudflare is down, your service is down


❌ Not Ideal for Raw TCP

  • HTTP/HTTPS: ✅ excellent

  • SMTP, custom binary protocols: ❌ limited


❌ Less Control Than Nginx

  • You can’t tweak every low-level header

  • Some advanced routing logic is abstracted


❌ Performance Overhead (Minor)

  • Extra hop via Cloudflare edge

  • Usually negligible, but measurable in ultra-low latency systems


When You Should Still Use Nginx

Use Nginx if:

  • You control your own datacenter

  • You need raw TCP/UDP

  • You want full L7 control

  • You’re building CDN-less infrastructure

Use Cloudflare Tunnel if:

  • You want speed of setup

  • You care about security

  • You don’t want to manage infra

  • You’re building developer tools or internal systems


Final Verdict

Nginx is infrastructure.
Cloudflare Tunnel is architecture.

Nginx asks:

“How do I expose my server safely?”

Cloudflare Tunnel asks:

“Why expose it at all?”

For modern apps, startups, internal tools, and developer platforms,
Cloudflare Tunnel is the smarter default.

More from this blog

A

AnkanHub

16 posts