Personally, if nginx made letsencrypt as easy as caddy does, I'd never even think about caddy. That's its One Thing that kinda tempts me.
31% nginx 23% apache 8% Openresty (which I've never heard of, looks like it is an augmented nginx) 5% cloudflare
[1]: https://github.com/kubernetes/ingress-nginx I took pains to say "community-maintained" because there's also an official nginx ingress controller from F5 (current corporate owner of nginx).
There's not a single proof except heartbleed in OpenSSL. I merely asked the author to provide the proof, not for you and I to engage in Go's memory safety and billions in damages and inherent nature of C and so on.
If we were to sum all the "damages" caused by faulty software, we'd arrive at a number that exceeds the total sum of money on planet Earth, let's not use that false metric for this discussion.
Is there an actual problem right now with nginx that Caddy circumvents with its architecture? Yes or no? That's the question.
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0133
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-2028
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-2089
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-4315
Should I go on? None of the above errors is possible in a memory safe language like golang.
Discord have switched away from Go for some performance-critical services because of it. [0] https://discord.com/blog/why-discord-is-switching-from-go-to...
Go is fast enough for Google. It's too slow for you?
I don't know. I haven't used Apache HTTP in a while, but Nginx seems to have a lot more foot-guns. I'm planning on giving Caddy a go on my next server upgrade.
The EFF cerbot plugin has it covered; assuming your generic Debian server with nginx already configured to host www.domain.com (trivial hello, world setup - nothing fancy) then it's:
apt-get install cerbot python3-certbot-nginx
certbot --nginx -d www.domain.com -d domain.com \
--agree-tos -m "email@domain.com" --no-eff-email \
--deploy-hook "systemctl reload nginx"
systemctl restart nginx
All done. Certbot is already running as a systemd service to handle ongoing renewals and it'll now restart nginx if your cert is updated. This example uses the trivial http-01 ACME method, if you need the more complex DNS based setup for wildcards that'll take a bit more elbow grease.That aside, for me the trade-off was different and I was willing to give up the benefits of included acme support for the benefits of running a very well-supported and well-known web server that at this point hosts most of the internet and which can run on port 80/443 without iptables hacks (not sure whether this still applies to caddy)
> which can run on port 80/443 without iptables hacks
Not sure what you mean. Do you mean that you need root to bind to those ports? In which case, you can give the process CAP_NET_BIND_SERVICE which lets it. Caddy's systemd service does this, and runs as a non-root user: https://github.com/caddyserver/dist/blob/2ceb535e076ed9b3083...
I do wish that NGINX made LetsEncrypt as easy as to use as Caddy does. We are all big fans of LetsEncrypt and are quite happy to see NGINX donating to the project.
In this project (MARA), LetsEncrypt support is integrated via [Cert Manager](https://cert-manager.io/) for Kubernetes. This is nice because it supports certs from a variety of issuers like AWS, Google, Vault, Cloudflare, etc in addition to Let's Encrypt.
As a side note, I'm looking at Traefik in my homelab and it's honestly difficult because I'm so comfortable with Nginx.
I also know a huge hospital chain in the US is using Caddy.
None of the proxies seem to do well with bidirectional gRPC streams as they just treat gRPC as a h2 proxy but I'd love to see that proven wrong.
I used this Caddyfile to proxy to the route_guide example (https://github.com/grpc/grpc-go/tree/master/examples/route_g...):
```
localhost {
reverse_proxy h2c://localhost:50051
}```
It works like a charm.
[0] https://github.com/caddyserver/caddy/blob/e4ce40f8ff04240540...
https://web.archive.org/web/20170913160203/https://caddyserv...
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package caddyBiggest reason is that debian's packaging requirements are way too much of a burden for us to conform to, especially for Go apps. And they update way too slow for us to be comfortable with.
Even worse than that, any time I tried to google to better understand how to do something with caddy, every result returned how to achieve exactly that with nginx; and would rarely find the way to do it with caddy.
But it's been about a year since that, unsure if things have changed.
Could you be more specific? We keep hearing vague comments like this about our docs, but without feedback pointing to specific issues, we can't improve them.
I suggest that next time you have trouble finding the information you're looking for, reach out to us and let us know. Open a topic on the forums, we'll be glad to help you find what you're looking for. And if you do so and point out a lack in our docs, we'll know where to focus our efforts.
Having said that, I’ll keep this in mind next time I try out again; and if I run into something, I’ll reach out in the forums.
I was at the time trying to setup jupyter to work with a reverse proxy such that I could access jupyter through zerotier.
Sorry this is all probably a messy set of words that don’t all make sense together with more details. I’ll commit to next time that I’m trying this or anything else, and I hit a wall, I’ll ask.
But I think Caddy is a fine server as well.
> WORK IN PROGRESS: Please note that this module is still unfinished and may have bugs. Please try it out and file bug reports - thanks!
Of course, I could run something else in front of the server, but it's simpler for my use cases not to. The auto-SSL and simplified configuration were very attractive things about Caddy, however.
If your CMS provides it, maybe you could run an exit poll for people who demo Caddy, then look elsewhere, as I'm just speaking from my own experience.
However I wonder if it would work better if the module were brought under the Caddy namespace and marked "beta".
At least then, there would be a show of commitment for the idea, if not the implementation.
Recently I've been looking at the Symfony framework, and this is how they introduce features, with a clear warning that the API etc. is subject to change.
Also you definitely need rate limiting out of the box, not as some beta plugin that needs to be fiddled in manually.
Also streaming is something that needs really good testing with high loads.
K8s is important for many people, too.
Of course it is not easy to find someone willing to test on a high traffic site when there are well established alternatives since many years and no actual problem needs to be solved.
"Easy configuration" is not very important for admins of high traffic sites. Not easy to find what could be the selling point for Caddy, but it should deliver one or two special things more.
https://web.archive.org/web/20170913160203/https://caddyserv...
The project lost tons of good faith back then, and in my eyes (as a brand) never recovered.
I was not offensive or ill-mannered, I merely wondered why a person, that's apparently capable of doing minimal research, does not do so before asking for opinion of people on HN in regards to software details. Briefly judging GitHub activity is not the way to make conclusions, which was the only detail being covered.
It's easy to label someone or something rude, I can't control how you read the text I write and what the imaginary tone of voice is. Great Robin Hood display, I love the fact we all get to be judge and jury who decide what's good and what's bad, often missing the real intent.