Caddy vs nginx: automatische HTTPS en config naast elkaar | We.Inc
Caddy vs nginx voor echte taken: automatische HTTPS, statische sites, reverse proxies, load balancing en WebSockets, met een bouwer die beide configs voor uw domein schrijft.
Het grote verschil zit in certificaten. Caddy serveert elke site standaard via HTTPS, haalt certificaten op bij Let's Encrypt of ZeroSSL, vernieuwt ze en stuurt HTTP voor u door. nginx heeft certificaatbestanden nodig die u zelf aanlevert, via een ACME-client of de aparte acme-module. Caddyfiles zijn korter; nginx biedt fijnere controle en een veel langere staat van dienst.
Caddy en nginx vergeleken op dagelijkse taken
Taak
Caddy
HTTPS-certificaten
Automatisch voor elk publiek domein in de config
U laat ssl_certificate naar bestanden wijzen, of voegt de aparte ngx_http_acme_module toe
Doorsturen van HTTP naar HTTPS
Automatisch
Een server-blok op poort 80 dat 301 teruggeeft
Compressie
encode zstd gzip
gzip on
Reverse proxy
reverse_proxy localhost:3000
proxy_pass in een location, plus headers
WebSockets via de proxy
Automatisch afgehandeld
Upgrade- en Connection-headers doorsturen
Standaard voor load balancing
round robin
Actieve health checks
health_uri in reverse_proxy
health_check alleen in de commerciële editie
Config controleren en herladen
caddy validate, caddy reload
nginx -t, nginx -s reload
De meeste vergelijkingen blijven steken bij functies. Hier typt u een domein en een app-poort en krijgt u beide configs, zodat u precies ziet hoeveel elke server u laat schrijven voor hetzelfde resultaat. Onder de bouwer staan fragmenten naast elkaar voor de taken die het vaakst voorkomen, en daarna eerlijke notities over waar elk van beide past.
Vul uw domein in en kies of de server statische bestanden moet uitleveren of verzoeken moet doorsturen naar een app.
Zet compressie en de www-redirect aan of uit om te zien welke regels elke server nodig heeft.
Kopieer de Caddyfile naast de caddy-binary en voer caddy run uit, of kopieer het nginx-blok naar een bestand in uw sites-map.
Haal voor nginx eerst een certificaat op met uw ACME-client en werk de twee certificaatpaden bij voordat u herlaadt.
Caddy kan alleen een publiek certificaat krijgen als het A- of AAAA-record van het domein naar de machine wijst en de poorten 80 en 443 van buitenaf bereikbaar zijn.
Geef Caddy blijvende, beschrijfbare opslag voor zijn datamap. Koppel in containers een volume, anders vraagt hij bij elke herstart nieuwe certificaten aan.
Voer caddy fmt uit op met de hand bewerkte Caddyfiles; het ruimt de inspringing elke keer op dezelfde manier op.
Test bij nginx met nginx -t voor elke herlaadbeurt. Het controleert de syntax en probeert ook bestanden te openen waar de config naar verwijst, zoals certificaatpaden.
Sinds Caddy 2.8 heeft de root-directive de matcher * niet meer nodig, dus root /srv werkt. Oudere gidsen die root * /srv schrijven, zijn nog steeds geldig.
Veelgestelde vragen
Is Caddy een directe vervanger van nginx?
Voor statische sites, reverse proxies en eenvoudige load balancing meestal wel, en de config wordt korter. Grote nginx-opstellingen met veel modules van derden, complexe map- en rewrite-logica of getunede caching hebben misschien geen één-op-één-equivalent in Caddy, dus vertaal en test site voor site.
Doet nginx nu automatische HTTPS?
nginx heeft een ngx_http_acme_module die ACME implementeert, maar die wordt niet standaard meegebouwd. U installeert hem als aparte dynamische module (het pakket nginx-module-acme) en configureert een uitgever. Zonder die module komen certificaten van een externe client.
Kan Caddy mij HTTPS op localhost geven?
Ja. Voor localhost en interne namen maakt Caddy zijn eigen lokale certificaatautoriteit en geeft daarmee certificaten uit. Uw systeem vraagt mogelijk één keer om het rootcertificaat te vertrouwen.
Welke presteert beter?
We publiceren geen snelheidscijfers, omdat die schommelen met hardware, TLS-instellingen en workload. Beide kunnen gewone websites en API's ruim aan. Als pure doorvoer voor u telt, benchmark dan uw eigen verkeerspatroon op uw eigen servers.
Ondersteunt Caddy load balancing en health checks?
Ja. Zet meerdere upstreams in reverse_proxy, kies een lb_policy zoals round_robin of least_conn, en voeg health_uri toe voor actieve checks of fail_duration voor passieve. Zonder policy kiest Caddy upstreams willekeurig.
Wat automatische HTTPS echt dekt
Als een Caddyfile een publiek domein noemt, haalt Caddy via ACME een certificaat op, serveert de site op 443, stuurt poort 80 door naar HTTPS en vernieuwt het certificaat op de achtergrond. Als één uitgever faalt, probeert hij het opnieuw en kan hij uitwijken naar een andere. Niets in de config noemt TLS, tenzij u de standaardinstellingen wilt wijzigen.
nginx laat dit aan u over. De gebruikelijke opzet is een ACME-client die certificaatbestanden schrijft en nginx na vernieuwing herlaadt, of de nieuwere acme-module die u bewust installeert.
Wanneer nginx beter past
nginx is overal: in distributies, containerimages en hostingpanelen, met documentatie en antwoorden voor bijna elke situatie. Teams die het al draaien, op bepaalde modules leunen of fijne controle over buffering en caching nodig hebben, hebben weinig reden om over te stappen.
Wanneer Caddy beter past
Kleine teams, zijprojecten en veel domeinen hebben het meeste aan het niet hoeven beheren van certificaten. Het eigen configformaat is JSON, dat caddy adapt uit een Caddyfile maakt, en caddy reload stuurt een nieuwe config via de admin-API naar het draaiende proces zonder downtime.
Load balancing over drie app-servers
Caddyfile
Round robin over drie backends, met health checks op de achtergrond tegen /healthz.
Round robin is de standaard. Open source nginx controleert de gezondheid alleen passief, via mislukte verzoeken.
WebSockets proxyen
Caddyfile
reverse_proxy voert de upgrade uit en houdt zonder extra regels een tunnel in twee richtingen open.
De headers Upgrade en Connection moeten expliciet worden doorgegeven; proxy_http_version 1.1 is nodig vóór nginx 1.29.7.