Self Host Compass

Networking & access

Caddy vs Nginx Proxy Manager vs Traefik

Caddy vs Nginx Proxy Manager vs Traefik — which reverse proxy should I actually use?

Short answer

Caddy vs Nginx Proxy Manager vs Traefik — which reverse proxy should I actually use?

Run Caddy if you want automatic HTTPS from a tiny text file and your services don't change every week — it's the least fuss for most people. Choose Nginx Proxy Manager if you'd rather click than edit config. Choose Traefik only if your stack is mostly Docker and changes constantly, so its label-based auto-discovery actually pays for the extra concepts.

All three are reverse proxies — one service that fronts your apps, terminating HTTPS and routing by hostname. They differ in how you tell them about your apps: Caddy in a small text file, Nginx Proxy Manager through a web UI, Traefik by reading labels off your running containers automatically.

  • ~3 linesCaddy config to give an app a hostname + HTTPSour own Caddyfile
  • 0certbot cron jobs any of them need (all auto-renew)
  • 1 UI vs 2 filesNPM's pitch — click instead of edit

Don’t pick on benchmarks — pick on your habits

For a home setup, all three will handle your traffic without breaking a sweat. The thing that actually differs is how you tell the proxy about your apps, and that’s a question about you, not about throughput.

Caddyfile
photos.example.com {
  reverse_proxy 127.0.0.1:2283
}
A whole service, HTTPS included. That's the entire config.

The case for each

  • Caddy — the default I’d recommend. Smallest config, automatic HTTPS, boring in the best way. Best when your set of services is fairly stable.
  • Nginx Proxy Manager — Caddy’s ease but through a web UI. Add a host, tick the SSL box, done. If editing a text file feels like a barrier, this removes it.
  • Traefik — the power tool. Point it at Docker and it discovers containers and builds routes from their labels, so a new container appears in the proxy with no separate edit. That’s fantastic if you spin containers up and down constantly — and unnecessary machinery if you don’t.

The honest trade-off

Traefik is the one people most often pick for the wrong reason: it’s powerful, so it feels like the “serious” choice. But its power is auto-discovery, and if your stack changes twice a year you’ll never feel the benefit — only the extra concepts. Match the tool to how much your setup actually moves.

How you configure each, and who it suits
ProxyYou configure byHTTPSBest for
CaddyA short text fileAutomatic, zero setupMost people; stable stacks
Nginx Proxy ManagerA web UIClick a boxPeople who prefer clicking to editing
TraefikDocker labels (auto)AutomaticBig, fast-changing Docker stacks
I run Caddy. Automatic HTTPS in about three lines beats fighting config, and I've never touched a certificate renewal. Traefik's auto-wiring is clever, but it's overkill unless your containers churn weekly.
— James Brooks

Common questions

Which is easiest for a beginner?

Nginx Proxy Manager if you want a UI and no config files; Caddy if you're comfortable editing a short text file. Both are genuinely easy. Traefik is the one with a real learning curve — its power (auto-discovery) is also what makes it more to understand up front.

Do I need Traefik if I use Docker?

No. Traefik is nicest with Docker because it can read container labels and wire routes itself, but Caddy and NPM front Docker containers perfectly well. Only pick Traefik if your set of containers changes often enough that hand-editing routes becomes the chore.

Is plain Nginx a fourth option?

Yes, and it's rock-solid — but you manage certificates yourself and the config is more verbose. Unless you already know Nginx, the three above give you the same result with far less ceremony.