Przejdź do treści głównej
50% zniżki wszystkie plany, oferta limitowana. Od $2.48/mo
12 min left
Aplikacje webowe i biznesowe

Caddy vs Nginx na VPS: porównanie plików konfiguracyjnych

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

Świeży VPS, domena skierowana na niego i jedno polecenie dzieli Cię od działającego serwera WWW. To, co wpiszesz jako następne, instaluje Caddy albo Nginx, a ta jedna decyzja kształtuje, ile czasu poświęcisz na TLS przez cały okres życia tej maszyny. A więc: Caddy vs Nginx na VPS, który zainstalujesz?

Poniżej te same trzy konfiguracje ustawione w obu narzędziach, obok siebie, z raportowanymi wartościami pamięci, haczykiem dotyczącym certyfikatów wildcard i praktycznymi uwagami o migracji, jeśli jesteś już na Nginx.

Krótka wersja

  • Wniosek: Caddy do większości świeżych zastosowań na VPS, zwłaszcza dla samodzielnych programistów, małych zespołów i podejścia ustaw i zapomnij dla TLS. Wybierz Nginx, gdy potrzebujesz jego ekosystemu modułów, jawnego strojenia, istniejącej wiedzy zespołu lub najmniejszego możliwego zużycia pamięci.
  • Automatyczne HTTPS: Caddy sam pozyskuje i odnawia certyfikaty. Bez Certbota, bez crona, bez hooka przeładowania. Nginx potrzebuje Certbota (lub innego klienta ACME) i automatyzacji odnawiania wokół niego.
  • Pamięć: Nginx jest szczuplejszy, dzięki C zamiast Go. Ta różnica rzadko o czymkolwiek decyduje na nowoczesnym planie; liczby są w tabeli poniżej.
  • Haczyk: Caddy nie jest bezkonfiguracyjny dla certyfikatów wildcard. Nazwa taka jak *.example.com wymaga wyzwania DNS, co oznacza wtyczkę i token API.

Całe porównanie na jednym ekranie:

CaddyNginx
JęzykGoC
Automatyczne HTTPSWbudowane (Let's Encrypt + ZeroSSL)Brak; wymaga Certbota lub innego klienta ACME
Rozwlekłość konfiguracjiMinimalna (kilka linii na witrynę)Jawna i rozwlekła
HTTP/3Włączone domyślnie wraz z HTTPSDostępne od 1.25.0; musi zostać włączone w konfiguracji Nginx. Kompilacje ze źródeł wymagają --with-http_v3_module.
Raportowana pamięć w stanie bezczynności15-25 MB2-8 MB
Raportowana pamięć przy 1000 połączeń80-120 MB50-80 MB
Ekosystem modułówMniejszy, rozszerzany przez xcaddyDuży i dojrzały
LicencjaApache 2.0BSD-2-Clause

Zakresy pamięci pochodzą z jednego testu VPS od strony trzeciej i należy je traktować jako orientacyjne, a nie jako uniwersalne wymagania. Rzeczywiste zużycie zależy od wersji oprogramowania, włączonych modułów, logowania, ruchu i metodologii testu. Informacje o wersji i licencji pochodzą z oficjalnych repozytoriów projektów.

Automatyczne HTTPS w Caddy (i co tak naprawdę zastępuje)

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 samodzielnie pozyskuje i odnawia certyfikaty TLS. Skieruj publiczną domenę na maszynę, uruchom Caddy, a pobierze on certyfikat z Let's Encrypt lub ZeroSSL, a następnie odnawia go w tle. Bez Certbota, bez zadania cron, bez hooka przeładowania po odnowieniu. To jest automatyczne HTTPS w Caddy w jednym zdaniu i to cały powód, dla którego ludzie się przesiadają.

Pod maską Caddy używa wyzwania HTTP-01 (port 80) lub TLS-ALPN-01 (port 443) aby udowodnić własność domeny, a następnie utrzymuje certyfikat aktualnym bez udziału żadnego drugiego narzędzia.

Odpowiednik w Nginx używa osobnego klienta ACME. Przy powszechnym certbot --nginx przepływie pracy Certbot może pozyskać i zainstalować certyfikat, a następnie ponownie użyć tej samej wtyczki i zapisanych opcji podczas odnawiania. Większość instalacji Certbota zawiera również zaplanowane zadanie, które uruchamia się certbot renew automatycznie.

Jeśli używasz certbot certonly lub innego klienta ACME, który jedynie zapisuje odnowione pliki na dysk, dodaj hook wdrożeniowy który przeładowuje Nginx po udanym odnowieniu. Taka konfiguracja działa, ale nadal pozostawia więcej ruchomych części niż Caddy: serwer WWW, klient ACME, harmonogram odnawiania i ewentualny hook wdrożeniowy pozostają osobnymi komponentami.

Przewaga operacyjna Caddy polega na tym, że wydawanie certyfikatów, ich wdrażanie, odnawianie oraz przekierowania z HTTP na HTTPS są zintegrowane z samym serwerem. Domyślnie Caddy zaczyna próbować odnowienia, gdy pozostaje mniej więcej jedna trzecia okresu ważności certyfikatu, 30 dni dla certyfikatu 90-dniowego, chyba że urząd certyfikacji określa inne okno odnawiania.

Wskazówka: Domyślne wyzwania ACME w Caddy wymagają publicznej osiągalności na porcie 80 lub 443: HTTP-01 używa portu 80, a TLS-ALPN-01 używa portu 443. Jeśli port 80 jest zablokowany, ale 443 jest otwarty, TLS-ALPN może nadal działać; jeśli maszyna nie jest skierowana do internetu, użyj DNS-01, tak samo jak w przypadku certyfikatów wildcard poniżej.

Pliki konfiguracyjne obok siebie

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

Oto trzy powszechne konfiguracje VPS: reverse proxy HTTPS, serwowanie plików statycznych i podstawowe uwierzytelnianie, napisane dla obu narzędzi. Przykłady dla Caddy zawierają automatyczne HTTPS. Przykłady dla Nginx zakładają, że certyfikat został już zapewniony, a przykłady z plikami statycznymi i basic auth pokazują tylko blok serwera HTTPS. Wykorzystaj ponownie blok przekierowania z portu 80 z pierwszego przykładu, jeśli chcesz uzyskać równoważne zachowanie przekierowania z HTTP na HTTPS.

Reverse proxy do lokalnej aplikacji na porcie 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;
}

Linie TLS w bloku Nginx zakładają, że Certbot już się uruchomił. Dla upstreamu HTTP takiego jak powyższy Caddy przekazuje przychodzący Host nagłówek dalej i domyślnie ustawia X-Forwarded-For, X-Forwarded-Proto oraz X-Forwarded-Host domyślnie. W przypadku Nginx zwykle dodajesz nagłówki proxy jawnie, gdy upstream potrzebuje oryginalnego hosta, schematu i łańcucha adresów klienta. To kompromis w miniaturze: Caddy dostarcza praktyczne domyślne ustawienia proxy, podczas gdy Nginx czyni więcej tego zachowania jawnym.

Serwowanie plików statycznych:

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

Basic auth, chroniące wszystko za nazwą użytkownika i hasłem:

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 narzędzia hashują hasło poza pasmem. Caddy używa caddy hash-password; Nginx używa htpasswd aby zbudować plik .htpasswd. Dyrektywa to basic_auth w aktualnym Caddy, swoją drogą. Było to basicauth dopóki v2.8.0 tego nie przemianowało, jak zaznaczono w dokumentacji basic_auth w Caddy, a stare poradniki nadal na tym ludzi potykają.

Wskazówka: Ten hash w Caddyfile to nie hasło. To wynik bcrypt z caddy hash-password. Uruchom polecenie, wklej to, co wypisze. Caddy odrzuca hasła w postaci jawnej w konfiguracji, co jest poprawnym domyślnym ustawieniem i małą niespodzianką za pierwszym razem.

Konfiguracje bronią się same. Caddy zamyka TLS, rozsądne nagłówki proxy i przekierowanie w kilku liniach; Nginx jest jawny i rozwlekły oraz daje Ci każdą możliwą śrubę do pokręcenia. Jeśli spędziłeś lata w Nginx, rozwlekłość to pamięć mięśniowa, a kontrola to sedno. Jeśli nie, Caddyfile to konfiguracja, którą zmieścisz w głowie. Praktyczny wniosek jest prosty: konfigurację Caddy łatwiej odczytać na pierwszy rzut oka, natomiast Nginx daje Ci bardziej jawną kontrolę.

Wydajność i pamięć: uważne czytanie benchmarków

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

Opublikowane testy wskazują w tym samym ogólnym kierunku: Nginx zwykle używa mniej pamięci i często prowadzi w surowej przepustowości, ale wielkość tej przewagi mocno zależy od środowiska.

In jednym teście VM z czterema rdzeniami od strony trzeciej, Nginx osiągnął około 48 000 żądań na sekundę, w porównaniu z około 42 000 dla Caddy. Ten sam test raportował opóźnienie HTTPS p99 na poziomie 2,1 ms dla Nginx i 2,4 ms dla Caddy. Traktuj to jako wyniki z jednej konfiguracji, a nie jako uniwersalny margines wydajności.

Zakresy pamięci w tabeli porównawczej pochodzą z osobnego testu VPS. Kolejny syntetyczny test przy 50 000 równoczesnych połączeń raportował 145 MB dla Nginx i 520 MB dla Caddy, ale ten test wykorzystywał znacząco inny sprzęt i warunki obciążenia. Jego bezwzględnych wartości nie należy porównywać bezpośrednio z liczbami dla VPS powyżej.

Wiarygodny wniosek jest węższy: Nginx zwykle ma mniejsze zużycie pamięci i ma tendencję do prowadzenia przy obciążeniach o wysokiej przepustowości lub wysokiej równoczesności. Dla zwykłego reverse proxy na małym lub średnim VPS oba są zwykle wystarczająco szybkie, więc prostota operacyjna jest często bardziej użytecznym czynnikiem decydującym.

Wniosek z sekcji: wybieraj na podstawie kwestii operacyjnych, chyba że Twój serwer ma ograniczoną pamięć lub Twoje własne testy obciążeniowe pokazują, że przepustowość proxy jest wąskim gardłem.

Haczyk z certyfikatem wildcard (Caddy nie zawsze jest bezkonfiguracyjny)

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 potrafi zautomatyzować certyfikaty wildcard, ale nie za pomocą domyślnych wyzwań HTTP-01 ani TLS-ALPN-01. Certyfikat dla *.example.com wymaga walidacji DNS-01, której Let's Encrypt wymaga dla certyfikatów wildcard. Oznacza to wtyczkę dostawcy DNS (wbudowaną w Twój plik binarny Caddy przez xcaddy) plus token API dla Twojego hosta DNS, skonfigurowany w bloku tls. To nie jest historia typu wpisz jedną linię i odejdź, którą reklamuje Caddy.

To dotyka użytkowników homelabów, którzy umieszczają wiele usług pod prawdziwą domeną, którą kontrolują, taką jak *.home.example.com, i zakładają, że wydawanie certyfikatów wildcard jest tak samo automatyczne jak app.example.com. Dla nazw czysto wewnętrznych, takich jak *.homelab.internal, traktuj to jako obszar lokalnego/wewnętrznego PKI, a nie publiczny certyfikat wildcard z Let's Encrypt. Aby być precyzyjnym: Caddy obsługuje certyfikaty wildcard bez problemu, po prostu nie robi tego za pomocą domyślnych wyzwań, a konfiguracja to krok wyżej niż w przypadku pojedynczej domeny. Nginx jest tu w tej samej sytuacji, ponieważ wymóg DNS-01 pochodzi z Let's Encrypt, a nie z serwera.

Jeśli chcesz GUI: Nginx Proxy Manager (krótka dygresja)

Nginx Proxy Manager to zupełnie inne zwierzę niż dwa powyższe narzędzia i wart jest jednego akapitu, bo nazwa myli ludzi. NPM to nakładka GUI na Nginx: zarządza regułami reverse proxy i certyfikatami Let's Encrypt przez interfejs webowy na porcie 81. To nie jest rdzeń Nginx i nie konfiguruje się go tak, jak rdzeń Nginx.

Kompromis to zwykły klikanie kontra konfiguracja. NPM to łatwy przycisk, dopóki nie zejdziesz ze ścieżki bez przeszkód. Jego konfiguracja jest zarządzana przez bazę danych aplikacji, a nie przez pojedynczy ręcznie edytowany plik konfiguracyjny. Domyślna konfiguracja Docker używa SQLite, natomiast MySQL/MariaDB i PostgreSQL to obsługiwane opcje zewnętrznych baz danych. Ta różnica wpływa też na przenośność: konfigurację Caddy często można przenieść, kopiując pojedynczy Caddyfile, podczas gdy wdrożenie Nginx Proxy Manager wymaga zachowania jego danych aplikacji i bazy danych . NPM to dobry wybór, jeśli naprawdę wolisz klikanie od edytowania, a Twoja konfiguracja pozostaje prosta. To zły wybór dla przepływu pracy typu infrastruktura jako kod.

Migracja z Nginx do Caddy (co się przekłada, a co nie)

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

Jeśli jesteś już na Nginx i rozważasz przejście, zacznij od obniżenia oczekiwań wobec automatyzacji: istnieje adapter konfiguracji NGINX dla Caddy, ale jest niekompletny i nie należy go traktować jako niezawodnej ścieżki migracji za jednym razem. Migracja z Nginx do Caddy to głównie ręczne przepisywanie, a większość z tego staje się krótsza.

Co się przekłada i staje się prostsze, według przewodnika konwersji od społeczności Caddy:

  • Dla upstreamów HTTP, reverse_proxy przekazuje przychodzący Host nagłówek dalej i domyślnie ustawia standardowe nagłówki X-Forwarded-*, więc większość tych proxy_set_header linii znika.
  • PHP zwija się z bloku location z try_files plus fastcgi_pass plus sterty parametrów do pojedynczej php_fastcgi dyrektywy.
  • Obsługa WebSocket jest automatyczna w Caddy v2. Jeśli poradnik każe Ci dodać osobną websocket dyrektywę, to relikt Caddy v1. Zignoruj to.

Co nie przekłada się automatycznie: wszystko związane z konkretnym modułem Nginx, którego Caddy nie ma, złożona logika rewrite i location, którą trzeba będzie przemyśleć od nowa, a nie przenieść, oraz konfiguracje certyfikatów wildcard, które ponownie sprowadzają Cię do konfiguracji wyzwania DNS z sekcji powyżej. Zaplanuj czas na moduły i przepisania; reszta to zwykle netto zmniejszenie liczby linii.

Który zainstalować? (Decyzja)

Widziałeś konfiguracje, liczby, haczyk z wildcard i koszt migracji, więc oto do czego to prowadzi. Zainstaluj Caddy, jeśli jesteś samodzielnym programistą lub małym zespołem, to jest świeże wdrożenie VPS, chcesz TLS w stylu ustaw i zapomnij, uruchamiasz Dockera z prostym routingiem albo po prostu chcesz konfiguracji mieszczącej się w pamięci mięśniowej. To większość osób czytających ten tekst.

Zainstaluj Nginx, jeśli potrzebujesz szczegółowej kontroli lub konkretnego modułu z jego dojrzałego ekosystemu, wyciskasz wydajność z serwera o ograniczonej pamięci, prowadzisz serwowanie plików statycznych o wysokiej równoczesności albo Twój zespół ma już głęboką wiedzę o Nginx i stertę działających konfiguracji. To solidne powody, a jeśli któryś z nich jest Twój, Nginx to właściwy wybór. To nie jest przypadek, w którym starsze narzędzie jest niewłaściwym narzędziem.

Na którymkolwiek się zdecydujesz, następnym krokiem jest umieszczenie go na maszynie. Oba Caddy oraz Nginx są dostępne jako wdrożenia jednym kliknięciem w naszym marketplace, więc możesz pominąć pracę instalacyjną i przejść prosto do Caddyfile lub bloku serwera. VPS z 1 GB to rozsądny punkt startu dla wdrożenia jednej witryny o niskim ruchu, ale dobierz rozmiar serwera do aplikacji i ruchu za proxy, a nie do samego proxy. Jeśli używasz Caddy jako drzwi wejściowych dla samodzielnie hostowanych usług, może on stać przed stosem monitorującym Prometheus i Grafana lub wdrożeniem Uptime Kuma bez potrzeby stosowania osobnych narzędzi TLS.

Wniosek z sekcji: wybierz Caddy, chyba że masz konkretny powód wskazujący na Nginx.

Często zadawane pytania

Czy Caddy zastępuje Certbota?

Tak. Caddy potrafi sam pozyskiwać i odnawiać publiczne certyfikaty, w tym certyfikaty wildcard, więc Certbot nie jest wymagany. Certyfikaty wildcard wymagają walidacji DNS-01, co oznacza skonfigurowanie zgodnego modułu dostawcy DNS i danych uwierzytelniających API.

Czy Caddy używa mniej pamięci niż Nginx?

Nie. Nginx zwykle ma mniejsze zużycie pamięci. Jeden test VPS od strony trzeciej raportował 2-8 MB w stanie bezczynności dla Nginx i 15-25 MB dla Caddy, ale te wartości są specyficzne dla obciążenia, a nie stanowią stałych wymagań co do pamięci. Ta różnica ma największe znaczenie na serwerach o ograniczonej pamięci, uruchamiających kilka usług.

Czy Caddy jest szybszy niż Nginx?

To zależy od obciążenia. Oba są zwykle wystarczająco szybkie dla typowego ruchu reverse proxy na VPS. W cytowanych testach, Nginx prowadził w surowej przepustowości i efektywności pamięci, ale wielkość różnicy znacząco zmieniała się w zależności od sprzętu, wzorca ruchu i poziomu równoczesności. Nie ma jednego procentu, który ma zastosowanie do każdego wdrożenia.

Czy Caddy obsługuje certyfikaty SSL wildcard?

Tak. Certyfikat wildcard taki jak *.example.com wymaga walidacji DNS-01. Gdy Caddy ma zgodny moduł dostawcy DNS i dane uwierzytelniające API, może automatycznie pozyskiwać i odnawiać certyfikat wildcard.

Czy Nginx Proxy Manager to to samo co Nginx?

Nie. Nginx Proxy Manager to nakładka GUI na Nginx, która przechowuje swoją konfigurację w bazie danych aplikacji, używa interfejsu webowego na porcie 81 i zarządza hostami reverse proxy oraz certyfikatami przez ten interfejs. Rdzeń Nginx konfiguruje się plikami tekstowymi i nie ma własnego GUI.

Kiedy powinienem użyć Nginx zamiast Caddy?

Wybierz Nginx, gdy potrzebujesz szczegółowej kontroli, konkretnego modułu z jego dojrzałego ekosystemu, każdego ostatniego MB na serwerze o ograniczonej pamięci, serwowania plików statycznych o wysokiej równoczesności albo masz już w zespole głęboką wiedzę o Nginx.

Udostępnij

Więcej z bloga

Czytaj dalej.

Gotowy do wdrożenia? Od $2,48/mies.

Niezależna chmura od 2008 roku. AMD EPYC, NVMe, 40 Gbps. Zwrot pieniędzy w ciągu 14 dni.