The Problem with “Traditional” Setup
If you’ve ever deployed a backend or full-stack app, chances are you’ve used Nginx.
And yeah it’s powerful. Battle-tested. Everywhere.
But let’s be honest…
- SSL setup is manual (certbot, renewals, cron jobs)
- Config files feel like a different programming language
- Small mistakes = silent failures
- Debugging is… not fun
After doing this a few times, I started asking:
Why is something so common still so painful?
That’s when I seriously tried Caddy.
What is Caddy?
Caddy is a modern web server designed with simplicity and security by default.
Think of it like:
Nginx, but built for today — not 2004.
1. Automatic HTTPS (This Alone Is Huge)
With Nginx, you typically do:
- Install certbot
- Generate certs
- Setup renewal cron
- Configure SSL manually
With Caddy?
example.com { reverse_proxy localhost:3000}That’s it.
SSL? Automatic
Renewal? Automatic
HTTP → HTTPS redirect? Automatic
2. Configuration That Actually Makes Sense
Compare this:
Nginx
server { listen 80; server_name example.com;
location / { proxy_pass http://localhost:3000; }}Caddy
example.com { reverse_proxy localhost:3000}Caddy configs feel like what you meant to write, not what you were forced to learn.
3. Built-in Features You Normally Glue Together
| Feature | Nginx Setup | Caddy Setup |
|---|---|---|
| SSL / HTTPS | certbot + manual config | Automatic (built-in) |
| Reverse Proxy | nginx config | Built-in |
| Load Balancing | Extra config / upstream blocks | Built-in |
| HTTP/2 & HTTP/3 | Manual enable + tuning | Enabled by default |
| Compression | Manual config (gzip/brotli) | Automatic |
4. Developer Experience Matters
As someone building products (APIs, SaaS, dev tools), I care about:
- Speed of setup
- Less cognitive load
- Fewer production mistakes
Caddy wins here.
You can spin up infra in minutes instead of hours.
5. When Nginx Still Wins
Let’s be fair Nginx isn’t obsolete.
Use Nginx if you need:
- Ultra fine-grained control
- Complex enterprise setups
- Legacy infra compatibility
- Advanced caching strategies
6. Real-World Use Case (What I Do)
For most of my projects:
- Node.js backend
- PostgreSQL
- Redis
- Deployed on AWS (EC2)
My Caddy setup:
api.myapp.com { reverse_proxy localhost:4000}
myapp.com { reverse_proxy localhost:3000}That’s my entire reverse proxy + SSL layer.
No certbot. No cron. No headaches.
Final Thoughts
Caddy isn’t trying to be everything. It’s trying to remove friction.
It’s what modern infra should feel like:
- Secure by default
- Minimal configuration
- Developer-friendly
- Production-ready
If you’ve been defaulting to Nginx just because “that’s what everyone uses”—
Try Caddy once on a side project.
You might not go back.
To see Caddy in action read this: Self Hosting Typesense