Ugrás a fő tartalomra
50% kedvezmény minden csomagra, korlátozott ideig. Már $2.48/mo
12 min left
Web és üzleti alkalmazások

Caddy kontra Nginx egy VPS-en: a konfigurációsfájl-összehasonlítás

A Szerző: Ariana 12 perc olvasás
Side-by-side terminal view of a Caddyfile and an nginx.conf for the same reverse proxy on a VPS

Friss VPS, rámutató domain, és egyetlen parancsra egy futó webszervertől. A következő dolog, amit begépel, vagy a Caddyt, vagy az Nginxet telepíti, és ez az egyetlen döntés meghatározza, mennyi időt tölt a TLS-sel a gép élettartama alatt. Szóval: Caddy kontra Nginx egy VPS-en, melyiket telepíti?

Az következik, ugyanaz a három beállítás mindkét eszközben konfigurálva, egymás mellett, a jelentett memóriaértékekkel, a helyettesítő tanúsítvány csapdájával és gyakorlati migrációs megjegyzésekkel, ha már Nginxen van.

A rövid verzió

  • Végkövetkeztetés: Caddy a legtöbb friss VPS-munkaterheléshez, különösen egyéni fejlesztőknek, kis csapatoknak és a beállítom-és-elfelejtem TLS-hez. Válassza az Nginxet, ha a modul-ökoszisztémájára, explicit hangolásra, meglévő csapatszakértelemre vagy a lehető legkisebb memórialábnyomra van szüksége.
  • Automatikus HTTPS: A Caddy maga szerzi be és újítja meg a tanúsítványokat. Nincs Certbot, nincs cron, nincs újratöltési horog. Az Nginxnek szüksége van a Certbotra (vagy egy másik ACME-kliensre) és a köré épülő megújítási automatizálásra.
  • Memória: Az Nginx karcsúbb, a C-nek köszönhetően a Go-val szemben. A különbség ritkán dönt el bármit is egy modern csomagon; a számok az alábbi táblázatban vannak.
  • A csapda: A Caddy nem konfigurációmentes a helyettesítőknél. Egy *.example.com-hoz hasonló név DNS-kihíváshoz igényel, ami egy bővítményt és egy API-tokent jelent.

A teljes összehasonlítás egy képernyőn:

CaddyNginx
NyelvGoC
Automatikus HTTPSBeépített (Let's Encrypt + ZeroSSL)Nincs; Certbotra vagy másik ACME-kliensre van szüksége
Konfiguráció terjengősségeMinimális (néhány sor oldalanként)Explicit és terjengős
HTTP/3Alapértelmezés szerint bekapcsolva HTTPS mellettElérhető 1.25.0 óta; az Nginx konfigurációjában engedélyezni kell. A forrásból való fordítások igénylik a --with-http_v3_module.
Jelentett tétlen memória15-25 MB2-8 MB
Jelentett memória 1000 kapcsolatnál80-120 MB50-80 MB
Modul-ökoszisztémaKisebb, xcaddy-vel bővíthetőNagy és kiforrott
LicencApache 2.0BSD-2-Clause

A memóriatartományok innen származnak: egy harmadik féltől származó VPS-teszt és inkább irányadóként, mintsem univerzális követelményekként kell kezelni. A tényleges használat a szoftververzióktól, az engedélyezett moduloktól, a naplózástól, a forgalomtól és a tesztelési módszertantól függ. A verzió- és licencinformációk a projektek hivatalos tárolóiból származnak.

A Caddy automatikus HTTPS-e (és mit vált ki valójában)

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

A Caddy magától szerzi be és újítja meg a TLS-tanúsítványokat. Irányítson egy nyilvános domaint a gépre, futtassa a Caddyt, és az szerez egy tanúsítványt a Let's Encrypttől vagy a ZeroSSL-től, majd a háttérben megújítja. Nincs Certbot, nincs cron-feladat, nincs megújítás utáni újratöltési horog. Ez a Caddy automatikus HTTPS-e egy mondatban, és ez az egész oka, amiért az emberek váltanak.

A motorháztető alatt a Caddy a HTTP-01 (port 80) vagy TLS-ALPN-01 (port 443) kihívást használja a domaintulajdon igazolására, majd bármilyen második eszköz bevonása nélkül tartja frissen a tanúsítványt.

Az Nginx megfelelője egy külön ACME-klienst használ. A gyakori certbot --nginx munkafolyamattal a Certbot beszerezheti és telepítheti a tanúsítványt, majd újrahasználhatja ugyanazt a bővítményt és a mentett beállításokat a megújítás során. A legtöbb Certbot-telepítés tartalmaz egy ütemezett feladatot is, amely certbot renew automatikusan fut.

Ha a certbot certonly vagy egy másik olyan ACME-klienst használ, amely csak a megújított fájlokat írja lemezre, adjon hozzá egy telepítési horgot , amely sikeres megújítás után újratölti az Nginxet. Ez a beállítás működik, de továbbra is több mozgó alkatrészt hagy maga után, mint a Caddy: a webszerver, az ACME-kliens, a megújítási ütemező és bármilyen telepítési horog külön komponensek maradnak.

A Caddy üzemeltetési előnye, hogy a tanúsítványkiadás, a telepítés, a megújítás és a HTTP-ről HTTPS-re való átirányítás magába a szerverbe van integrálva. Alapértelmezés szerint a Caddy akkor kezdi meg a megújítási kísérletet, amikor nagyjából egy tanúsítvány élettartamának egyharmada van hátra, ami egy 90 napos tanúsítványnál 30 nap, hacsak a tanúsítványkiadó nem ad meg eltérő megújítási ablakot.

Profi tipp: A Caddy alapértelmezett ACME-kihívásai nyilvános elérhetőséget igényelnek a 80-as vagy a 443-as porton: a HTTP-01 a port 80-at használja, míg a TLS-ALPN-01 a port 443-at. Ha a port 80 blokkolva van, de a 443 nyitva, a TLS-ALPN továbbra is működhet; ha a gép nem internet felé néz, használjon DNS-01-et, ugyanúgy, mint az alábbi helyettesítő tanúsítványoknál.

A konfigurációs fájlok egymás mellett

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

Íme három gyakori VPS-beállítás: egy HTTPS fordított proxy, statikus fájlok kiszolgálása és alapszintű hitelesítés, mindkét eszközhöz megírva. A Caddy-példák tartalmazzák az automatikus HTTPS-t. Az Nginx-példák feltételezik, hogy egy tanúsítványt már kiállítottak, és a statikusfájl- és alaphitelesítési példák csak a HTTPS szerverblokkot mutatják. Ha egyenértékű HTTP-ről HTTPS-re való viselkedést szeretne, használja újra a port 80-as átirányítási blokkot az első példából.

Egy fordított proxy egy helyi alkalmazáshoz a 3000-es porton:

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;
}

Az Nginx-blokk TLS-sorai feltételezik, hogy a Certbot már lefutott. A fentihez hasonló HTTP upstream esetén a Caddy átadja a bejövő Host fejlécet, és beállítja a X-Forwarded-For, X-Forwarded-Proto, és X-Forwarded-Host alapértelmezés szerint. Az Nginxnél általában explicit módon adja hozzá a proxy-fejléceket, amikor az upstreamnek szüksége van az eredeti hosztra, sémára és klienscím-láncra. Ez a kompromisszum kicsiben: a Caddy gyakorlatias proxy-alapértelmezésekkel érkezik, míg az Nginx explicitebbé tesz ebből a viselkedésből többet.

Statikus fájlok kiszolgálása:

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;
    }
}

Alapszintű hitelesítés, mindent egy felhasználónév és jelszó mögé véd:

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;
    }
}

Mindkét eszköz a jelszót külön csatornán hasheli. A Caddy a caddy hash-password-t használja; az Nginx a htpasswd -t használja a .htpasswd fájl felépítéséhez. A direktíva a basic_auth a jelenlegi Caddyben, egyébként. Ez basicauth volt, amíg a v2.8.0 át nem nevezte, ahogy azt a Caddy basic_auth dokumentációmegjegyzi, és a régi útmutatók még mindig megbotlasztják rajta az embereket.

Profi tipp: Az a hash a Caddyfile-ban nem a jelszó. Ez bcrypt-kimenet a caddy hash-password-ből. Futtassa a parancsot, illessze be, amit kiír. A Caddy elutasítja a nyílt szövegű jelszavakat a konfigurációban, ami a helyes alapértelmezés és egy kis meglepetés első alkalommal.

A konfigurációk maguk érvelnek. A Caddy néhány sorba hajtja össze a TLS-t, az ésszerű proxy-fejléceket és egy átirányítást; az Nginx explicit és terjengős, és minden gombot a kezébe ad. Ha éveket töltött Nginxben, a terjengősség izommemória, és a vezérlés a lényeg. Ha nem, a Caddyfile egy olyan konfiguráció, amelyet fejben tud tartani. A gyakorlati lényeg egyszerű: a Caddy konfigurációja egy pillantásra könnyebben olvasható, míg az Nginx explicitebb vezérlést ad.

Teljesítmény és memória: a benchmarkok gondos olvasása

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

A publikált tesztek ugyanabba az általános irányba mutatnak: az Nginx általában kevesebb memóriát használ, és gyakran vezet a nyers áteresztőképességben, de ennek az előnynek a mértéke erősen függ a környezettől.

In egy harmadik féltől származó, négymagos VM-tesztszerint az Nginx megközelítőleg 48 000 kérést ért el másodpercenként, szemben a Caddy körülbelül 42 000-ével. Ugyanez a teszt 2,1 ms HTTPS p99 késleltetést jelentett az Nginxnél és 2,4 ms-ot a Caddynél. Ezeket egyetlen beállítás eredményeként kezelje, ne univerzális teljesítménybeli különbségként.

Az összehasonlító táblázatban szereplő memóriatartományok egy külön VPS-tesztbőlszármaznak. Egy másik, 50 000 egyidejű kapcsolatnál végzett szintetikus teszt 145 MB-ot jelentett az Nginxnél és 520 MB-ot a Caddynél, de ez a teszt lényegesen eltérő hardver- és munkaterhelési körülményeket használt. Az abszolút értékeit nem szabad közvetlenül összehasonlítani a fenti VPS-számokkal.

A megbízható következtetés szűkebb: az Nginxnek általában kisebb a memórialábnyoma, és hajlamos vezetni nagy áteresztőképességű vagy nagy párhuzamosságú munkaterheléseknél. Egy szokásos kis-közepes VPS fordított proxyhoz mindkettő általában elég gyors, ezért az üzemeltetési egyszerűség gyakran a hasznosabb döntő tényező.

A szakasz tanulsága: válasszon az üzemeltetés alapján, hacsak a szervere nem memóriakorlátos, vagy a saját terheléses tesztjei nem mutatják, hogy a proxy áteresztőképessége a szűk keresztmetszet.

A helyettesítő tanúsítvány csapdája (a Caddy nem mindig konfigurációmentes)

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

A Caddy automatizálhatja a helyettesítő tanúsítványokat, de nem az alapértelmezett HTTP-01 vagy TLS-ALPN-01 kihívásaival. Egy tanúsítvány a *.example.com DNS-01 érvényesítést igényel, amelyet a Let's Encrypt kötelezővé tesz a helyettesítő tanúsítványokhoz. Ez egy DNS-szolgáltató bővítményt (a Caddy binárisába xcaddy-vel beépítve) plusz egy API-tokent jelent a DNS-hosztjához, a tls blokkban konfigurálva. Ez nem az az egy-sort-gépelek-és-elsétálok történet, amelyet a Caddy hirdet.

Ez megcsípi azokat a homelab-felhasználókat, akik sok szolgáltatást tesznek egy általuk vezérelt valódi domain alá, például *.home.example.com, és feltételezik, hogy a helyettesítő tanúsítvány kiállítása ugyanolyan automatikus, mint app.example.com. Tisztán belső neveknél, mint például *.homelab.internal, kezelje azt helyi/belső PKI-területként, ne nyilvános Let's Encrypt helyettesítőként. Pontosan fogalmazva: a Caddy jól kezeli a helyettesítőket, csak nem az alapértelmezett kihívásokkal teszi, és a beállítás egy lépcsőfokkal fentebb van az egydomaines esethez képest. Az Nginx itt ugyanabban a cipőben jár, mivel a DNS-01 követelmény a Let's Encrypttől ered, nem a szervertől.

Ha GUI-t szeretne: Nginx Proxy Manager (egy rövid kitérő)

Az Nginx Proxy Manager egy másik állatfaj a fenti két eszközhöz képest, és megér egy bekezdést, mert a név összezavarja az embereket. Az NPM egy GUI-burkolat az Nginx felett: fordított proxy szabályokat és Let's Encrypt tanúsítványokat kezel egy webes felületen keresztül a port 81-en. Nem az Nginx mag, és nem úgy konfigurálják, ahogy az Nginx magot.

A kompromisszum a szokásos kattintás kontra konfiguráció. Az NPM a könnyű gomb, amíg le nem lép a boldog ösvényről. A konfigurációját egy alkalmazás-adatbázison keresztül kezelik, nem pedig egyetlen kézzel szerkesztett konfigurációs fájlon keresztül. Az alapértelmezett Docker-beállítás SQLite-ot használ, míg a MySQL/MariaDB és a PostgreSQL támogatott külső adatbázis-lehetőségek. Ez a különbség a hordozhatóságot is befolyásolja: egy Caddy-beállítás gyakran áthelyezhető egyetlen Caddyfile másolásával, míg egy Nginx Proxy Manager telepítéshez meg kell őrizni annak alkalmazásadatait és adatbázisát . Az NPM jó választás, ha valóban jobban szereti a kattintást a szerkesztésnél, és a beállítása egyszerű marad. Rossz választás egy infrastruktúra-mint-kód munkafolyamathoz.

Migrálás Nginxről Caddyre (mi fordítható át és mi nem)

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

Ha már Nginxen van, és mérlegeli a váltást, kezdje az automatizálással kapcsolatos elvárásai csökkentésével: van egy Caddy NGINX-konfigurációadapter, de hiányos, és nem szabad megbízható, egylövéses migrációs útként kezelni. Egy Nginxről Caddyre való migráció többnyire kézi átírás, és a nagy része rövidebbé válik.

Ami átfordítható és egyszerűbbé válik, a Caddy közösség átalakítási útmutatója:

  • szerint: HTTP upstreameknél a reverse_proxy átadja a bejövő Host fejlécet, és alapértelmezés szerint beállítja a szabványos X-Forwarded-* fejléceket, így azon proxy_set_header sorok többsége eltűnik.
  • A PHP egy location blokkból, amely try_files plusz fastcgi_pass plusz egy csomó paramétert tartalmaz, egyetlen php_fastcgi direktívába zsugorodik össze.
  • A WebSocket-kezelés automatikus a Caddy v2-ben. Ha egy útmutató azt mondja, hogy adjon hozzá egy külön websocket direktívát, az egy Caddy v1 maradvány. Hagyja figyelmen kívül.

Ami nem fordítható át automatikusan: bármi, ami egy adott Nginx-modulhoz kötődik, amellyel a Caddy nem rendelkezik, az összetett átírási és location-logika, amelyet inkább újra kell gondolnia, mintsem átültetnie, valamint a helyettesítő tanúsítványbeállítások, amelyek visszavezetik a fenti szakasz DNS-kihívás beállításához. Számoljon a modulokkal és az átírásokkal; a többi általában nettó sorcsökkenés.

Melyiket telepítse? (A döntés)

Látta a konfigurációkat, a számokat, a helyettesítő csapdát és a migráció költségét, tehát íme, hova jut ki a dolog. Telepítse a Caddyt, ha egyéni fejlesztő vagy kis csapat, ez egy friss VPS-telepítés, beállítom-és-elfelejtem TLS-t szeretne, egyszerű útválasztású Dockert futtat, vagy egyszerűen csak egy olyan konfigurációt szeretne, amely belefér az izommemóriába. Ez a legtöbb ember, aki ezt olvassa.

Telepítse az Nginxet, ha finomhangolt vezérlésre vagy a kiforrott ökoszisztémájából egy adott modulra van szüksége, ha teljesítményt sajtol ki egy memóriakorlátos szerverből, ha nagy párhuzamosságú statikusfájl-kiszolgálást végez, vagy ha a csapata már mély Nginx-szakértelemmel és egy halom működő konfigurációval rendelkezik. Ezek szilárd okok, és ha valamelyik az öné, az Nginx a helyes döntés. Ez nem az az eset, amikor a régebbi eszköz a rossz eszköz.

Bármelyiknél is köt ki, a következő lépés az, hogy felteszi a gépre. Mindkettő Caddy és Nginx elérhető egykattintásos telepítésként a piacterünkön, így átugorhatja a telepítési munkát, és egyenesen a Caddyfile-hoz vagy a szerverblokkhoz mehet. Egy 1 GB-os VPS ésszerű kiindulópont egy alacsony forgalmú, egyoldalas telepítéshez, de a szervert a proxy mögötti alkalmazáshoz és forgalomhoz méretezze, ne pusztán a proxyhoz. Ha a Caddyt önállóan üzemeltetett szolgáltatások bejárati ajtajaként használja, elhelyezkedhet egy Prometheus és Grafana monitorozó verem vagy egy Uptime Kuma telepítés előtt anélkül, hogy külön TLS-eszközkészletre lenne szükség.

A szakasz tanulsága: válassza a Caddyt, hacsak nincs konkrét oka, amely az Nginxre mutat.

Gyakran ismételt kérdések

Kiváltja a Caddy a Certbotot?

Igen. A Caddy maga tud nyilvános tanúsítványokat beszerezni és megújítani, beleértve a helyettesítő tanúsítványokat is, így a Certbot nem szükséges. A helyettesítők DNS-01 érvényesítést igényelnek, ami egy kompatibilis DNS-szolgáltató modul és API-hitelesítő adatok konfigurálását jelenti.

Kevesebb memóriát használ a Caddy, mint az Nginx?

Nem. Az Nginxnek általában kisebb a memórialábnyoma. Egy harmadik féltől származó VPS-teszt 2-8 MB-ot jelentett tétlen állapotban az Nginxnél és 15-25 MB-ot a Caddynél, de ezek az értékek munkaterhelés-specifikusak, nem pedig rögzített memóriaigények. A különbség a legfontosabb a több szolgáltatást futtató, memóriakorlátos szervereknél.

Gyorsabb a Caddy, mint az Nginx?

A munkaterheléstől függ. Mindkettő általában elég gyors a tipikus VPS fordított proxy forgalomhoz. A hivatkozott tesztekbenaz Nginx vezetett a nyers áteresztőképességben és a memóriahatékonyságban, de a különbség mértéke lényegesen változott a hardverrel, a forgalmi mintázattal és a párhuzamossági szinttel. Nincs egyetlen olyan százalék, amely minden telepítésre érvényes.

Támogatja a Caddy a helyettesítő SSL-tanúsítványokat?

Igen. Egy helyettesítő, mint például *.example.com DNS-01 érvényesítést igényel. Miután a Caddynek van egy kompatibilis DNS-szolgáltató modulja és API-hitelesítő adatai, automatikusan be tudja szerezni és meg tudja újítani a helyettesítő tanúsítványt.

Ugyanaz az Nginx Proxy Manager, mint az Nginx?

Nem. Az Nginx Proxy Manager egy GUI-burkolat az Nginx felett, amely a konfigurációját egy alkalmazás-adatbázisban tárolja, egy webes UI-t használ a port 81-en, és ezen a felületen keresztül kezeli a fordított proxy hosztokat és a tanúsítványokat. Az Nginx magot szöveges fájlokkal konfigurálják, és nincs saját GUI-ja.

Mikor használjam az Nginxet a Caddy helyett?

Válassza az Nginxet, ha finomhangolt vezérlésre, a kiforrott ökoszisztémájából egy adott modulra, egy memóriakorlátos szerver minden utolsó MB-jára, nagy párhuzamosságú statikusfájl-kiszolgálásra van szüksége, vagy ha a csapatban már van mély Nginx-szakértelem.

Megosztás

Több a blogról

Folytassa az olvasást.

Készen áll a telepítésre? Már 2,48 $/hó-tól.

Független felhő 2008 óta. AMD EPYC, NVMe, 40 Gbps. 14 napos pénzvisszafizetési garancia.