Přejít na hlavní obsah
Sleva 50% všechny plány, omezený čas. Od $2.48/mo
12 min left
Web a firemní aplikace

Caddy vs Nginx na VPS: Srovnání konfiguračních souborů

A Autor: Ariana 12 min čtení
Side-by-side terminal view of a Caddyfile and an nginx.conf for the same reverse proxy on a VPS

Čerstvý VPS, doména na něj namířená a jeden příkaz od běžícího webového serveru. To, co napíšete příště, nainstaluje buď Caddy, nebo Nginx, a toto jedno rozhodnutí utváří, kolik času strávíte s TLS po celou životnost stroje. Takže: Caddy vs Nginx na VPS, který nainstalujete?

Následuje stejné tři nastavení nakonfigurované v obou nástrojích, vedle sebe, s uváděnými čísly paměti, háčkem u zástupných certifikátů a praktickými poznámkami k migraci, pokud už jste na Nginx.

Zkrácená verze

  • Závěr: Caddy pro většinu čerstvých VPS zátěží, zejména pro samostatné vývojáře, malé týmy a TLS na principu nastav a zapomeň. Nginx zvolte, když potřebujete jeho ekosystém modulů, explicitní ladění, stávající zkušenosti týmu nebo co nejmenší paměťovou stopu.
  • Automatické HTTPS: Caddy si certifikáty získává a obnovuje sám. Žádný Certbot, žádný cron, žádný reload hook. Nginx potřebuje Certbot (nebo jiného ACME klienta) a automatizaci obnovy kolem něj.
  • Paměť: Nginx je štíhlejší, díky C oproti Go. Tento rozdíl na moderním tarifu málokdy o něčem rozhoduje; čísla jsou v tabulce níže.
  • Háček: Caddy není bez konfigurace pro zástupné znaky. Název jako *.example.com potřebuje DNS challenge, což znamená plugin a API token.

Celé srovnání na jedné obrazovce:

CaddyNginx
JazykGoC
Automatické HTTPSVestavěné (Let's Encrypt + ZeroSSL)Žádné; potřebuje Certbot nebo jiného ACME klienta
Rozsáhlost konfiguraceMinimální (několik řádků na web)Explicitní a rozsáhlá
HTTP/3Ve výchozím nastavení zapnuté s HTTPSDostupné od 1.25.0; musí být povoleno v konfiguraci Nginx. Sestavení ze zdroje vyžadují --with-http_v3_module.
Uváděná paměť v nečinnosti15-25 MB2-8 MB
Uváděná paměť při 1 000 spojeních80-120 MB50-80 MB
Ekosystém modulůMenší, rozšiřovaný přes xcaddyRozsáhlý a vyzrálý
LicenceApache 2.0BSD-2-Clause

Rozsahy paměti pocházejí z jednoho VPS testu od třetí strany a měly by být brány jako orientační, nikoli univerzální požadavky. Skutečné využití závisí na verzích softwaru, povolených modulech, logování, provozu a metodice testování. Informace o verzích a licencích pocházejí z oficiálních repozitářů projektů.

Automatické HTTPS v Caddy (a co vlastně nahrazuje)

How Caddy's automatic HTTPS replaces the Nginx plus Certbot workflow by handling certificate issuance, renewal, and HTTP-to-HTTPS redirects inside the server

Caddy si získává a obnovuje TLS certifikáty sám. Namiřte na stroj veřejnou doménu, spusťte Caddy a on získá certifikát od Let's Encrypt nebo ZeroSSL, poté ho obnovuje na pozadí. Žádný Certbot, žádná cron úloha, žádný reload hook po obnově. To je automatické HTTPS v Caddy v jedné větě a je to celý důvod, proč lidé přecházejí.

Pod kapotou Caddy používá challenge HTTP-01 (port 80) nebo TLS-ALPN-01 (port 443) k prokázání vlastnictví domény, poté udržuje certifikát aktuální bez zapojení jakéhokoli druhého nástroje.

Ekvivalent v Nginx používá samostatného ACME klienta. S běžným certbot --nginx postupem může Certbot certifikát získat a nainstalovat, poté při obnově znovu použít stejný plugin a uložené volby. Většina instalací Certbotu také obsahuje naplánovanou úlohu, která běží certbot renew automaticky.

Pokud používáte certbot certonly nebo jiného ACME klienta, který obnovené soubory pouze zapisuje na disk, přidejte deploy hook , který po úspěšné obnově znovu načte Nginx. Toto nastavení funguje, ale stále ponechává více pohyblivých částí než Caddy: webový server, ACME klient, plánovač obnovy a jakýkoli deployment hook zůstávají samostatnými komponentami.

Provozní výhoda Caddy spočívá v tom, že vydávání certifikátů, nasazení, obnova a přesměrování z HTTP na HTTPS jsou integrovány přímo do serveru. Ve výchozím nastavení začíná Caddy pokoušet o obnovu, když zhruba zbývá jedna třetina životnosti certifikátu, 30 dní u 90denního certifikátu, pokud certifikační autorita neurčí jiné okno obnovy.

Tip

Výchozí ACME challenge v Caddy potřebují veřejnou dostupnost na portu 80 nebo 443: HTTP-01 používá port 80, zatímco TLS-ALPN-01 používá port 443. Pokud je port 80 blokovaný, ale 443 otevřený, TLS-ALPN může stále fungovat; pokud stroj nesměřuje do internetu, použijte DNS-01, stejně jako u zástupných certifikátů níže.

Konfigurační soubory vedle sebe

The same HTTPS reverse proxy written as a short Caddyfile and a longer nginx.conf server block, side by side

Zde jsou tři běžná nastavení VPS, HTTPS reverzní proxy, obsluha statických souborů a základní autentizace, napsaná pro oba nástroje. Příklady pro Caddy zahrnují automatické HTTPS. Příklady pro Nginx předpokládají, že certifikát již byl zajištěn, a příklady statických souborů a základní autentizace ukazují pouze blok serveru HTTPS. Znovu použijte přesměrovací blok pro port 80 z prvního příkladu, pokud chcete ekvivalentní chování přesměrování z HTTP na HTTPS.

Reverzní proxy na lokální aplikaci na portu 3000:

Caddyfile

example.com {
    reverse_proxy localhost:3000
}

nginx.conf

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

Řádky TLS v bloku Nginx předpokládají, že Certbot již proběhl. U HTTP upstreamu, jako je ten výše, Caddy propouští příchozí Host hlavičku dál a nastavuje X-Forwarded-For, X-Forwarded-Proto, a X-Forwarded-Host ve výchozím nastavení. U Nginx normálně proxy hlavičky přidáváte explicitně, když upstream potřebuje původního hostitele, schéma a řetězec klientských adres. To je ten kompromis v miniatuře: Caddy dodává praktické výchozí hodnoty proxy, zatímco Nginx činí více z tohoto chování explicitním.

Obsluha statických souborů:

Caddyfile

example.com {
    root * /var/www
    file_server
}

nginx.conf

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    root /var/www;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}

Základní autentizace, chránící vše za uživatelským jménem a heslem:

Caddyfile

example.com {
    basic_auth {
        Bob $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG
    }
    reverse_proxy localhost:3000
}

nginx.conf

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    auth_basic           "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Oba nástroje hashují heslo mimo pásmo. Caddy používá caddy hash-password; Nginx používá htpasswd k vytvoření souboru .htpasswd. Direktiva je basic_auth v aktuálním Caddy, mimochodem. Byla to basicauth dokud ji v2.8.0 nepřejmenovala, jak je uvedeno v dokumentaci basic_auth k Caddy, a staré návody na tom lidi stále nachytávají.

Tip

Ten hash v Caddyfile není heslo. Je to výstup bcrypt z caddy hash-password. Spusťte příkaz, vložte, co vypíše. Caddy odmítá hesla v prostém textu v konfiguraci, což je správné výchozí nastavení a malé překvapení, když se to stane poprvé.

Konfigurace mluví samy za sebe. Caddy skládá TLS, rozumné proxy hlavičky a přesměrování do několika řádků; Nginx je explicitní a rozsáhlý a předává vám každý ovládací prvek. Pokud jste strávili léta v Nginx, rozsáhlost je svalová paměť a kontrola je to hlavní. Pokud ne, Caddyfile je konfigurace, kterou udržíte v hlavě. Praktický závěr je jednoduchý: konfiguraci Caddy je snazší přečíst na první pohled, zatímco Nginx vám dává explicitnější kontrolu.

Výkon a paměť: Pečlivé čtení benchmarků

Reading Caddy vs Nginx benchmarks carefully: Nginx generally uses less memory and leads on throughput, but the margin depends heavily on hardware and workload

Publikované testy ukazují obecně stejným směrem: Nginx obvykle používá méně paměti a často vede v čisté propustnosti, ale velikost této výhody silně závisí na prostředí.

In jednom čtyřjádrovém VM testu od třetí strany, Nginx dosáhl přibližně 48 000 požadavků za sekundu, ve srovnání s asi 42 000 u Caddy. Stejný test uváděl HTTPS p99 latenci 2,1 ms pro Nginx a 2,4 ms pro Caddy. Berte je jako výsledky z jednoho nastavení, nikoli jako univerzální výkonnostní rozdíl.

Rozsahy paměti ve srovnávací tabulce pocházejí ze samostatného VPS testu. Další syntetický test při 50 000 souběžných spojeních uváděl 145 MB pro Nginx a 520 MB pro Caddy, ale tento test používal podstatně odlišný hardware a podmínky zátěže. Jeho absolutní čísla by se neměla přímo porovnávat s čísly VPS výše.

Spolehlivý závěr je užší: Nginx má obecně menší paměťovou stopu a bývá v čele u zátěží s vysokou propustností nebo vysokou souběžností. U běžné reverzní proxy na malém až středním VPS jsou obvykle oba dostatečně rychlé, takže provozní jednoduchost je často užitečnějším rozhodujícím faktorem.

Shrnutí sekce: vybírejte podle provozu, pokud váš server není omezený pamětí nebo pokud vaše vlastní zátěžové testy neukazují, že úzkým hrdlem je propustnost proxy.

Háček zástupného certifikátu (Caddy není vždy bez konfigurace)

The wildcard certificate catch: a cert for a star-dot-example.com name needs DNS-01 validation, which means a DNS-provider plugin and an API token, not Caddy's default zero-config path

Caddy dokáže zástupné certifikáty automatizovat, ale ne se svými výchozími challenge HTTP-01 nebo TLS-ALPN-01. Certifikát pro *.example.com vyžaduje validaci DNS-01, kterou Let's Encrypt pro zástupné certifikáty vyžaduje. To znamená plugin poskytovatele DNS (zabudovaný do vaší binárky Caddy přes xcaddy) plus API token pro vašeho DNS hostitele, nakonfigurovaný v bloku tls. Není to ten příběh napiš jeden řádek a odejdi, který Caddy propaguje.

To se dotýká uživatelů homelabů, kteří umisťují mnoho služeb pod skutečnou doménu, kterou spravují, například *.home.example.com, a předpokládají, že vydání zástupného certifikátu je stejně automatické jako app.example.com. U čistě interních názvů jako *.homelab.internal to berte jako oblast lokálního/interního PKI, ne jako veřejný zástupný certifikát Let's Encrypt. Abychom byli přesní: Caddy zástupné certifikáty zvládá dobře, jen je nedělá s výchozími challenge a nastavení je o krok náročnější než u případu s jednou doménou. Nginx je zde na tom stejně, protože požadavek DNS-01 pochází od Let's Encrypt, ne od serveru.

Pokud chcete GUI: Nginx Proxy Manager (krátká odbočka)

Nginx Proxy Manager je jiné zvíře než dva nástroje výše a zaslouží si jeden odstavec, protože ten název lidi mate. NPM je GUI obal nad Nginx: spravuje pravidla reverzní proxy a certifikáty Let's Encrypt přes webové rozhraní na portu 81. Není to jádro Nginx a nekonfiguruje se způsobem, jakým se konfiguruje jádro Nginx.

Kompromis je ten obvyklý klikání versus konfigurace. NPM je snadné tlačítko, dokud nevykročíte z vyšlapané cesty. Jeho konfigurace je spravována přes aplikační databázi, nikoli přes jediný ručně upravovaný konfigurační soubor. výchozí nastavení Dockeru používá SQLite, zatímco MySQL/MariaDB a PostgreSQL jsou podporované možnosti externí databáze. Tento rozdíl také ovlivňuje přenositelnost: nastavení Caddy lze často přesunout zkopírováním jediného Caddyfile, zatímco nasazení Nginx Proxy Manager vyžaduje zachování svých aplikačních dat a databáze . NPM je dobrá volba, pokud skutečně preferujete klikání před úpravami a vaše nastavení zůstává jednoduché. Je to špatná volba pro workflow infrastruktura jako kód.

Migrace z Nginx na Caddy (co se přeloží a co ne)

Migrating from Nginx to Caddy: reverse-proxy headers, PHP blocks, and WebSocket handling get shorter, while custom modules and complex rewrites need a manual rethink

Pokud už jste na Nginx a zvažujete přechod, začněte snížením očekávání ohledně automatizace: existuje adaptér konfigurace NGINX pro Caddy, ale je neúplný a neměl by být brán jako spolehlivá jednorázová cesta migrace. Migrace z Nginx na Caddy je většinou ruční přepis a většina z něj se zkrátí.

Co se přeloží a zjednoduší, podle průvodce převodem od komunity Caddy:

  • U HTTP upstreamů reverse_proxy propouští příchozí Host hlavičku dál a ve výchozím nastavení nastavuje standardní hlavičky X-Forwarded-*, takže většina těchto proxy_set_header řádků zmizí.
  • PHP se scvrkne z bloku location s try_files plus fastcgi_pass plus hromadou parametrů do jediné php_fastcgi direktivy.
  • Zpracování WebSocket je v Caddy v2 automatické. Pokud vám návod říká, abyste přidali samostatnou websocket direktivu, je to relikt z Caddy v1. Ignorujte ho.

Co se nepřeloží automaticky: cokoli vázaného na konkrétní modul Nginx, který Caddy nemá, složitá logika rewrite a location, kterou budete muset spíše přehodnotit než přenést, a nastavení zástupných certifikátů, která vás vrátí zpět k nastavení DNS challenge z předchozí sekce. Počítejte s časem na moduly a přepisy; zbytek je obvykle čistým snížením počtu řádků.

Který byste měli nainstalovat? (Rozhodnutí)

Viděli jste konfigurace, čísla, háček se zástupnými certifikáty a cenu migrace, takže tady je závěr. Nainstalujte Caddy, pokud jste samostatný vývojář nebo malý tým, jde o čerstvé nasazení VPS, chcete TLS na principu nastav a zapomeň, provozujete Docker s jednoduchým směrováním nebo chcete jen konfiguraci, která se vejde do svalové paměti. To je většina lidí, kteří tohle čtou.

Nainstalujte Nginx, pokud potřebujete jemnou kontrolu nebo konkrétní modul z jeho vyzrálého ekosystému, ždímáte výkon ze serveru omezeného pamětí, provozujete obsluhu statických souborů s vysokou souběžností nebo váš tým už má hluboké zkušenosti s Nginx a hromadu funkčních konfigurací. To jsou pevné důvody, a pokud je jeden z nich váš, Nginx je správná volba. Toto není případ, kdy je starší nástroj tím nesprávným nástrojem.

Ať už skončíte u kteréhokoli, dalším krokem je dostat ho na stroj. Oba Caddy a Nginx jsou dostupné jako nasazení jedním kliknutím v našem tržišti, takže můžete přeskočit instalační práci a jít rovnou na Caddyfile nebo blok serveru. 1GB VPS je rozumný výchozí bod pro nasazení jednoho webu s nízkým provozem, ale server dimenzujte podle aplikace a provozu za proxy, nikoli podle proxy samotné. Pokud používáte Caddy jako vstupní bránu pro self-hostované služby, může stát před monitorovacím stackem Prometheus a Grafana nebo nasazením Uptime Kuma bez nutnosti samostatných TLS nástrojů.

Shrnutí sekce: zvolte Caddy, pokud nemáte konkrétní důvod, který ukazuje na Nginx.

Časté dotazy

Nahrazuje Caddy Certbot?

Ano. Caddy si dokáže veřejné certifikáty získávat a obnovovat sám, včetně zástupných certifikátů, takže Certbot není potřeba. Zástupné znaky potřebují validaci DNS-01, což znamená konfiguraci kompatibilního modulu poskytovatele DNS a API přihlašovacích údajů.

Používá Caddy méně paměti než Nginx?

Ne. Nginx má obecně menší paměťovou stopu. Jeden VPS test od třetí strany uváděl 2-8 MB v nečinnosti pro Nginx a 15-25 MB pro Caddy, ale tato čísla jsou specifická pro danou zátěž, nikoli pevné požadavky na paměť. Rozdíl je nejdůležitější na serverech omezených pamětí, které provozují několik služeb.

Je Caddy rychlejší než Nginx?

Záleží na zátěži. Oba jsou normálně dostatečně rychlé pro typický provoz reverzní proxy na VPS. V citovaných testech Nginx vedl v čisté propustnosti a paměťové efektivitě, ale velikost rozdílu se podstatně měnila podle hardwaru, vzorce provozu a úrovně souběžnosti. Neexistuje jediné procento, které platí pro každé nasazení.

Podporuje Caddy zástupné SSL certifikáty?

Ano. Zástupný znak jako *.example.com vyžaduje validaci DNS-01. Jakmile má Caddy kompatibilní modul poskytovatele DNS a API přihlašovací údaje, dokáže zástupný certifikát získat a obnovovat automaticky.

Je Nginx Proxy Manager totéž co Nginx?

Ne. Nginx Proxy Manager je GUI obal nad Nginx, který ukládá svou konfiguraci do aplikační databáze, používá webové UI na portu 81 a spravuje hostitele reverzní proxy a certifikáty přes toto rozhraní. Jádro Nginx se konfiguruje textovými soubory a nemá vlastní GUI.

Kdy bych měl použít Nginx místo Caddy?

Nginx zvolte, když potřebujete jemnou kontrolu, konkrétní modul z jeho vyzrálého ekosystému, každý poslední MB na serveru omezeném pamětí, obsluhu statických souborů s vysokou souběžností, nebo když už váš tým má hluboké zkušenosti s Nginx.

Sdílet

Další z blogu

Pokračuj ve čtení.

Hotov k nasazení? Od 2,48 $/měs.

Nezávislý cloud od roku 2008. AMD EPYC, NVMe, 40 Gbps. Vrácení peněz do 14 dnů.