Skip to Content
🧠 ConceptsReverse Proxies Explained

Reverse Proxies Explained

Right now your tools run on ports like :3001, :8000, :8080. That’s fine for testing, but you don’t want users visiting http://your-ip:8000.

A reverse proxy maps clean domains to those ugly ports:

plausible.yourdomain.com → localhost:8000 uptime.yourdomain.com → localhost:3001 supabase.yourdomain.com → localhost:8443

It also handles HTTPS (SSL certificates) automatically.

Which One to Use?

ProxyOur Take
CaddyUse this. Automatic HTTPS, zero-config SSL, human-readable config. Built for self-hosters.
Nginx Proxy ManagerGUI-first option. Great if you hate config files. Slightly more resource-heavy.
TraefikPowerful but complex. Built for Kubernetes. Overkill for most self-hosting setups.
Nginx (raw)The classic. Fine but verbose. No auto-SSL without certbot scripts.

🏆 The Verdict: Start with Caddy. Seriously. The config file is 6 lines.

Step 1: Deploy Caddy

# docker-compose.yml version: '3.8' services: caddy: image: caddy:2-alpine container_name: caddy restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data - caddy_config:/config volumes: caddy_data: caddy_config:

Step 2: Configure Your Domains

Create a Caddyfile in the same directory:

plausible.yourdomain.com { reverse_proxy localhost:8000 } uptime.yourdomain.com { reverse_proxy localhost:3001 } git.yourdomain.com { reverse_proxy localhost:3000 }

That’s the entire config. Caddy automatically obtains and renews Let’s Encrypt SSL certificates for every domain listed.

Step 3: Point DNS

In your domain registrar (Cloudflare, Namecheap, etc.), add A records:

TypeNameValue
Aplausibleyour-server-ip
Auptimeyour-server-ip
Agityour-server-ip

Step 4: Start

docker compose up -d

Within 60 seconds, Caddy will obtain SSL certificates and your tools will be live on proper HTTPS domains.

How It Works (Simplified)

User visits plausible.yourdomain.com DNS resolves to your server IP Caddy receives the request on port 443 Caddy reads Caddyfile: "plausible.yourdomain.com → localhost:8000" Caddy forwards the request to your Plausible container User sees Plausible dashboard over HTTPS 🔒

Setting Up a Reverse Proxy (Practical Guide) — Get Nginx, Caddy, or Traefik running now → SSL/TLS for Self-Hosters — Deep dive into certificates and security → Deploy Guides — All our guides include reverse proxy config