Hacker News new | ask | show | jobs
by supz_k 1016 days ago
Just a personal experience. About 6 months ago, we moved from NGINX to Caddy on our web app, which handled about 300 million HTTP requests per month at that time (2 web servers, so about 150 million each)

CPU Usage:

with NGINX - 15-20% with Caddy - 70-80%

I tried multiple tweaks but nothing helped to get NGINX-level performance. So, after a few weeks, we migrated back to NGINX.

That being said, I still absolutely love Caddy and use it in a few small scale apps.

- The DX it provides is amazing. - Creating a PHP-FPM reverse proxy is just a couple of lines. - Generating SSL certificates on the server is a breeze. With NGINX, you have to mess with other software like certbot. - It just works :)

4 comments

Thanks for your feedback!

I'd love to capture a profile next time you have a chance. We've been primarily focused on features until just about 6 months ago, so we have started making significant optimizations only recently.

Love to hear it!
Well yeah, NGINX is a highly optimized C application, whereas Caddy is written in Go, so it would be unfair to expect NGINX-level performance. Caddy is more modern and has more helpful features (that are easier to implement thanks to Go), but performance-wise... OTOH, if you use NGINX to serve a PHP or Node app, Caddy serving a Go app should be competitive ;)
It’s definitely fair to expect performance to be within one order of magnitude. 4 is really unreasonable.
4x worse performance is within one order of magnitude. An order of magnitude would be 10x worse.
That’s only if you’re using base 10. Base 2 is a perfectly acceptable order of magnitude.
Then it would still be only 2 orders of magnitude, not 4
Do not feed the troll.
Have you used caddy with HTTP/3? The quic-go version shipped with v2.6.0 wasn't tuned for optimal performance.
Does nginx's configuration complexity mean anything in the age of ChatGPT?

I set up a whole reverse proxy stack on my personal webserver (thanks to the swag docker image: nginx + auto-renewing let's encrypt + fail2ban). I hadn't really done any web stuff before, certainly nothing on the public Internet.

I didn't have time to read the nginx doc so I had ChatGPT do most of it. I'd then ask for changes depending on the challenges of a specific webapp (for example, not requiring basic_auth on certain routes that were using the tool's own auth).

I realize this is a simple example, but if I was able to achieve all my goals quickly with zero prior experience, surely it can't be that hard for someone who does this stuff for a living.

ChatGPT recently recommended rm -fr as the appropriate flags to delete files with confirmation.

Good luck with such setups. Best case they fail, worst case they become security nightmares.