Caddy vs nginx: automatyczne HTTPS i konfiguracja obok siebie | We.Inc
Caddy vs nginx w prawdziwych zadaniach: automatyczne HTTPS, strony statyczne, reverse proxy, load balancing i WebSockety, z generatorem, który pisze obie konfiguracje dla Twojej domeny.
Główna różnica to certyfikaty. Caddy domyślnie serwuje każdą stronę przez HTTPS, pobierając i odnawiając certyfikaty z Let's Encrypt lub ZeroSSL i przekierowując za Ciebie HTTP. nginx potrzebuje plików certyfikatów, które dostarczasz sam, z klienta ACME albo z osobnego modułu acme. Caddyfile są krótsze; nginx daje dokładniejszą kontrolę i ma znacznie dłuższą historię.
Caddy i nginx porównane w codziennych zadaniach
Zadanie
Caddy
Certyfikaty HTTPS
Automatycznie dla każdej publicznej domeny w konfiguracji
Wskazujesz ssl_certificate na pliki albo dodajesz osobny ngx_http_acme_module
Przekierowanie HTTP na HTTPS
Automatycznie
Blok server na porcie 80, który zwraca 301
Kompresja
encode zstd gzip
gzip on
Reverse proxy
reverse_proxy localhost:3000
proxy_pass w location, plus nagłówki
WebSockety przez proxy
Obsługiwane automatycznie
Przekaż nagłówki Upgrade i Connection
Domyślny load balancing
round robin
Aktywne health checki
health_uri w reverse_proxy
health_check tylko w wersji komercyjnej
Sprawdzenie i przeładowanie konfiguracji
caddy validate, caddy reload
nginx -t, nginx -s reload
Większość porównań kończy się na funkcjach. Tutaj możesz wpisać domenę i port aplikacji i dostać obie konfiguracje, aby zobaczyć dokładnie, ile każdy serwer każe Ci napisać dla tego samego efektu. Pod generatorem znajdziesz fragmenty obok siebie dla najczęstszych zadań, a potem szczere uwagi o tym, gdzie każdy z nich pasuje.
Wpisz domenę i wybierz, czy serwer ma serwować pliki statyczne, czy przekazywać żądania do aplikacji.
Przełączaj kompresję i przekierowanie www, aby zobaczyć, jakich linii potrzebuje każdy serwer.
Skopiuj Caddyfile obok pliku binarnego caddy i uruchom caddy run albo skopiuj blok nginx do pliku w folderze sites.
W nginx najpierw zdobądź certyfikat swoim klientem ACME i zaktualizuj dwie ścieżki certyfikatów przed przeładowaniem.
Caddy może uzyskać publiczny certyfikat tylko wtedy, gdy rekord A lub AAAA domeny wskazuje na maszynę, a porty 80 i 443 są dostępne z zewnątrz.
Zapewnij Caddy trwałe, zapisywalne miejsce na katalog danych. W kontenerach zamontuj wolumen, inaczej przy każdym restarcie będzie prosić o nowe certyfikaty.
Uruchamiaj caddy fmt na ręcznie edytowanych Caddyfile; za każdym razem porządkuje wcięcia w ten sam sposób.
W nginx przed każdym przeładowaniem testuj przez nginx -t. Sprawdza składnię i próbuje też otworzyć pliki, do których odwołuje się konfiguracja, na przykład ścieżki certyfikatów.
Od Caddy 2.8 dyrektywa root nie potrzebuje już matchera *, więc root /srv działa. Starsze poradniki, które piszą root * /srv, nadal są poprawne.
Najczęściej zadawane pytania
Czy Caddy to bezpośredni zamiennik nginx?
Dla stron statycznych, reverse proxy i prostego load balancingu zwykle tak, a konfiguracja staje się krótsza. Duże wdrożenia nginx korzystające z wielu modułów zewnętrznych, złożonej logiki map i rewrite albo dostrojonego cache mogą nie mieć dokładnego odpowiednika w Caddy, więc tłumacz i testuj po jednej stronie naraz.
Czy nginx obsługuje teraz automatyczne HTTPS?
nginx ma moduł ngx_http_acme_module, który implementuje ACME, ale nie jest on domyślnie wbudowany. Instalujesz go jako osobny moduł dynamiczny (pakiet nginx-module-acme) i konfigurujesz wystawcę. Bez niego certyfikaty pochodzą z zewnętrznego klienta.
Czy Caddy da mi HTTPS na localhost?
Tak. Dla localhost i nazw wewnętrznych Caddy tworzy własny lokalny urząd certyfikacji i wystawia z niego certyfikaty. Twój system może raz poprosić o zaufanie jego certyfikatowi głównemu.
Który ma lepszą wydajność?
Nie publikujemy wyników szybkości, bo zmieniają się zależnie od sprzętu, ustawień TLS i obciążenia. Oba swobodnie obsługują typowe strony i API. Jeśli dla Ciebie liczy się surowa przepustowość, zrób benchmark własnego wzorca ruchu na własnych serwerach.
Czy Caddy obsługuje load balancing i health checki?
Tak. Wypisz kilka upstreamów w reverse_proxy, wybierz lb_policy, na przykład round_robin lub least_conn, i dodaj health_uri dla aktywnych sprawdzeń albo fail_duration dla pasywnych. Bez polityki Caddy wybiera upstreamy losowo.
Co naprawdę obejmuje automatyczne HTTPS
Gdy Caddyfile wymienia publiczną domenę, Caddy uzyskuje certyfikat przez ACME, serwuje stronę na porcie 443, przekierowuje port 80 na HTTPS i odnawia certyfikat w tle. Jeśli jeden wystawca zawiedzie, ponawia próbę i może przejść na innego. Nic w konfiguracji nie wspomina o TLS, chyba że chcesz zmienić ustawienia domyślne.
nginx zostawia to Tobie. Typowa konfiguracja to klient ACME, który zapisuje pliki certyfikatów i przeładowuje nginx po ich odnowieniu, albo nowszy moduł acme, który instalujesz celowo.
Kiedy lepiej pasuje nginx
nginx jest wszędzie: w dystrybucjach, obrazach kontenerów i panelach hostingowych, z dokumentacją i odpowiedziami na niemal każdą sytuację. Zespoły, które już go używają, polegają na konkretnych modułach albo potrzebują dokładnej kontroli nad buforowaniem i cache, mają niewiele powodów, by się przenosić.
Kiedy lepiej pasuje Caddy
Najwięcej zyskują małe zespoły, projekty poboczne i wiele domen, bo nie trzeba zarządzać certyfikatami. Natywnym formatem konfiguracji jest JSON, który caddy adapt tworzy z Caddyfile, a caddy reload przesyła nową konfigurację do działającego procesu przez jego admin API bez przestojów.
Load balancing trzech serwerów aplikacji
Caddyfile
Round robin między trzema backendami, z health checkami w tle na /healthz.
Round robin jest domyślny. nginx open source sprawdza stan tylko pasywnie, przez nieudane żądania.
Proxy dla WebSocketów
Caddyfile
reverse_proxy wykonuje upgrade i utrzymuje otwarty dwukierunkowy tunel bez dodatkowych linii.
Nagłówki Upgrade i Connection trzeba przekazać jawnie; proxy_http_version 1.1 jest potrzebne przed nginx 1.29.7.