--- title: Reverse Proxies Explained description: "What a reverse proxy does and why you need one. Set up Caddy or Nginx to serve your self-hosted tools on proper domains with automatic HTTPS." --- # 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? | Proxy | Our Take | |---|---| | **Caddy** ✅ | **Use this.** Automatic HTTPS, zero-config SSL, human-readable config. Built for self-hosters. | | **Nginx Proxy Manager** | GUI-first option. Great if you hate config files. Slightly more resource-heavy. | | **Traefik** | Powerful 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. ## Setting Up Caddy (Recommended) ### Step 1: Deploy Caddy ```yaml # 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: | Type | Name | Value | |---|---|---| | A | `plausible` | `your-server-ip` | | A | `uptime` | `your-server-ip` | | A | `git` | `your-server-ip` | ### Step 4: Start ```bash 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)](/quick-start/reverse-proxy) — Get Nginx, Caddy, or Traefik running now → [SSL/TLS for Self-Hosters](/concepts/ssl-tls) — Deep dive into certificates and security → [Deploy Guides](/deploy) — All our guides include reverse proxy config