That's one of the best parts of OSS code - You don't just have to follow them to the next version they release.
(One example is Tengine - It is really nicely setup and a lot of people prefer it to core nginx already)
i would end up paying twice as much for caddy as i do for server
I think caddy and nginx are both great pieces of software that have overly expensive commercial pricing.
Apache is really struggling on resource consumption. It's still living in the world of one process or one thread per connection.
Operationally it always ends up in a clusterfuck of rewrite rules and there are many gotchas with undocumented and misbehaving directives.
Not exactly - you choose the event MPM (mod_http2 won't even run with prefork MPM).
It hasn't lived in that world for a decade or so. It's great to give advice, but at least make it valid and factual. With the Apache 2.4 event MPM, httpd is async and event-driven and is just as fast as nginx.
It's still creating multiple processes that get recycled periodically, each with a fixed number of threads. Every active request holds a thread.
Apache quickly runs into troubles when having long lived requests (slow API calls or large file downloads) or when using websockets (hold a thread permanently).
The tuning to balance processes, threads, connections, requests and resource consumption is extremely complicated and it doesn't get very far.
HAProxy and nginx can both handle 10k concurrent connections out of the box. Apache requires extensive tuning before 1k.
Apache has improved and now has things such as Event MPM inspired by nginx. Nowadays most of us would run applications behind a proxy, not by running mod_php or mod_python directly - which made old school apps very slow.
Also Apache is notoriously easy to configure.
And Nginx still absolutely rules when delivering static content.
There is also Varnish Cache which is very good.
- PHP under apache is faster
- Small config files per site
- .htaccess at the folder level when required
I usually use both and serve php from apache and serve static content over nginx. Best of both worlds.
With nginx the config is centralized in a specific location. With Apache, configs are all over the place.
- Provides HTTP caching (via mod_cache)
- Simplifies the deployment stack by providing built-in interpreters for dynamic languages. e.g. mod_php (i.e. you don't need php-fpm), mod_wsgi (i.e. you don't need gunicorn)
- Load-balancer upstream affinity ("stickiness") based on HTTP cookies
- Load-balancing based on upstream's connection count (via mod_heartbeat)
- Built-in Let's Encrypt integration (via mod_md)
tl;dr provides a lot of features out of the box -- some people may see this as "bloat" or overly tight coupling, but this provides simplicity.
I feel that the let's encrypt CLI clients are plenty good for nginx, to the point that installing a new module for apache (let alone nginx) is more work than just running a CLI client.
If you want TLS automation, Caddy is superbly good at fetching its own certs, and you don't have to fiddle with installing an additional module to do it.
It's generally something around 20-50ms extra last time I did some benchmarks