Slik installerer du Caddy-webserveren med automatisk HTTPS
Installer Caddy på Ubuntu fra det offisielle arkivet, skriv en Caddyfile for statiske nettsteder og reversproxier, forstå automatiske sertifikater, systemd, logger og vanlige feil når du migrerer fra Nginx.

Caddy er en webserver som henter og fornyer TLS-sertifikater som standard. For en liten VPS som hoster ett eller to domener fjerner det en hel klasse Certbot-timere og Nginx-snippet-filer. Konfigurasjonsspråket (Caddyfile) er kort. Reversproxy, gzip og HTTP/2 er vanlige funksjoner, ikke en helg med ekstra moduler.
Nginx er fortsatt det rette valget for noen butikker: dere har allerede kamptestede configs, eller dere trenger en svært spesifikk modul. Denne veilederen er for det andre vanlige tilfellet — du vil ha HTTPS som virker på en fersk Hiddence-VPS uten å memorere include-snippets. Vi installerer Caddy fra det offisielle apt-arkivet, forklarer hvordan det snakker med Let's Encrypt, serverer et statisk nettsted, proxer en lokal app, hoster flere domener, ser på logger og dekker de vanlige port-80-kranglene med Apache eller en gammel Nginx.
Når Caddy er et godt treff
Automatisk HTTPS er overskriften, men den daglige gevinsten er færre bevegelige deler. Caddy lytter på 80 og 443, omdirigerer HTTP til HTTPS og lagrer sertifikater i datakatalogen sin. Du trenger fortsatt et domene som peker på VPS-en. Du trenger fortsatt å ikke ødelegge ACME (brannmur 80/tcp, ingen annen prosess som stjeler :80). Jokertegnsertifikater trenger en DNS-leverandørmodul — det er en lengre sti enn et sertifikat for én vert.
- Automatisk HTTP→HTTPS og sertifikatfornyelse
- Lesbar Caddyfile i stedet for lange serverblokker
- Kapabel reversproxy for Node, Python, PHP-FPM via ekstra config, eller Docker-backends
- HTTP/2 og moderne TLS-standarder uten et chifferregneark
- systemd-enhet fra den offisielle pakken
Krav
Et domene må resolvere til denne VPS-en før Caddy kan bevise ACME HTTP-01. Hvis DNS fortsatt propagerer, mislykkes Caddy med utstedelse og prøver igjen; det ser ut som 'Caddy er ødelagt' når det bare er DNS. Stopp Apache eller Nginx først hvis de eier 80/443.
- Ubuntu 22.04 eller 24.04
- En domene-A-post til VPS-IP-en (og AAAA hvis du bruker IPv6)
- Portene 80 og 443 ledige og tillatt i brannmuren
- Root eller sudo
Steg 1: Installer Caddy fra det offisielle arkivet
Ikke installer en tilfeldig gammel Caddy fra standard Ubuntu universe hvis du vil ha aktuell TLS- og ACME-oppførsel. Caddy-prosjektet dokumenterer en apt-kilde. Etter installasjon finnes caddy-brukeren, og tjenesten er aktivert.
ssh root@YOUR_VPS_IP
apt update && apt -y install debian-keyring debian-archive-keyring apt-transport-https curl gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
apt update
apt -y install caddy
caddy version
systemctl status caddy --no-pagerSteg 2: Første Caddyfile — statisk nettsted
Standard-Caddyfile er /etc/caddy/Caddyfile. Erstatt den med domenet ditt. Caddy vil prøve å hente et sertifikat så snart konfigurasjonen lastes hvis vertsnavnet ikke er localhost. Legg nettstedfiler i en katalog som caddy-brukeren kan lese (ofte www-data-lignende rettigheter, men pakken bruker brukeren caddy).
mkdir -p /var/www/example
echo '<h1>It works</h1>' > /var/www/example/index.html
chown -R caddy:caddy /var/www/example
cat >/etc/caddy/Caddyfile <<'EOF'
example.com {
root * /var/www/example
file_server
encode gzip
}
EOF
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy
# Watch issuance:
journalctl -u caddy -fSteg 3: Reversproxy for en lokal applikasjon
Hvis Gunicorn, Node eller Docker lytter på 127.0.0.1:8000, skal Caddy være den eneste offentlige prosessen. Direktivet reverse_proxy videresender Host og X-Forwarded-*-headere på en fornuftig måte for de fleste apper. Hvis appen genererer absolutte HTTP-URL-er, sett trusted proxy / HTTPS-flagg i appen (Django SECURE_PROXY_SSL_HEADER, Express trust proxy, og så videre).
app.example.com {
encode gzip
reverse_proxy 127.0.0.1:8000
}
# Several hosts in one file are normal:
# blog.example.com {
# root * /var/www/blog
# file_server
# }Steg 4: Brannmur og systemd
Tillat 80 og 443. Caddys enhet er caddy.service; reload er nok etter Caddyfile-redigeringer hvis prosessen er frisk. Hvis du endrer miljøvariabler for et DNS-plugin, er en full omstart tydeligere. Sertifikater ligger under /var/lib/caddy/.local/share/caddy/ som standard — inkluder den stien i sikkerhetskopier hvis du bryr deg om hastighetsgrenser ved reinstallasjon.
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
systemctl enable --now caddy
systemctl reload caddy
# Backup cert storage (path may vary slightly by version):
ls -la /var/lib/caddy/Steg 5: Logger, komprimering og headere
Tilgangslogger hjelper når en bot hamrer en sti, eller når du feilsøker 404-er. Du kan logge per nettsted. Legg til sikkerhetsheadere hvis du hoster en nettleserapp; ikke kopier en enorm headerpakke uten å forstå HSTS (når du setter en lang max-age, husker nettlesere det).
example.com {
root * /var/www/example
file_server
encode gzip
log {
output file /var/log/caddy/example.log
}
header {
X-Content-Type-Options nosniff
Referrer-Policy no-referrer-when-downgrade
-Server
}
}
mkdir -p /var/log/caddy
chown caddy:caddy /var/log/caddy
systemctl reload caddySteg 6: PHP og andre tillegg
Caddy kan snakke med PHP-FPM med direktivet php_fastcgi. Det er nok for mange WordPress- eller Laravel-verter, men du trenger fortsatt php-fpm installert og en socket-sti som matcher. Hvis du allerede har en perfekt Nginx PHP-config, er migrering på én kveld valgfritt — Caddy skinner mer på reversproxy + statisk + automatisk TLS.
example.com {
root * /var/www/example
php_fastcgi unix//run/php/php8.3-fpm.sock
file_server
}
# Confirm FPM is running:
systemctl status php8.3-fpmMigrere fra Nginx uten uventet nedetid
Stopp Nginx før du starter Caddy, ellers kjemper de om 80/443. Senk DNS TTL dagen før hvis du også flytter IP-er. Test med curl --resolve slik at du kan treffe den nye VPS-en før du bytter A-posten. Behold Nginx-configs i git en uke i tilfelle du må rulle tilbake.
- systemctl stop nginx && systemctl disable nginx
- Installer Caddy, valider Caddyfile, start Caddy
- curl -I --resolve example.com:443:NEW_IP https://example.com
- Endre DNS først deretter hvis IP-en er ny
- Ny utstedelse er automatisk; ikke kjør også Certbot mot samme vertsnavn
Feilsøking
ACME-feil er nesten alltid DNS, brannmur eller en annen tjeneste på port 80. Caddy-logglinjer nevner tls.obtain. Hvis nettstedet virker på HTTP men ikke HTTPS, ble utstedelsen aldri fullført. Hvis du ser for mange sertifikater, har du truffet Let's Encrypt-hastighetsgrenser — bruk staging-CA mens du tester, ikke produksjon.
- validate feiler: Caddyfile-syntaks, manglende klamme
- permission denied on root: chown caddy for nettstedkatalogen
- bind: address already in use — ss -tulpn | grep -E ':80|:443'
- certificate timeout: dig +short domenet fra VPS-en, ufw allow 80
- 502 reverse_proxy: backend nede, eller du proxet til localhost fra et containernettverk feil
Sikkerhetsmerknader
Caddys TLS-standarder er konservative. Jobben din er applikasjonssikkerhet og SSH. Ikke aktiver Caddys admin-API på et offentlig grensesnitt. Standard admin-endepunkt er lokalt; la det være slik. Hvis du bruker en Caddyfile fra internett, les hver matcher — en snippet som reverse_proxies /* til en intern IP kan bli en åpen proxy.
- Ikke eksponer admin-API-et
- Hold pakken oppdatert
- HSTS bare når du er sikker på at HTTPS virker for alle vertsnavn
- Skill test- og produksjonsvertsnavn for å beskytte ACME-hastighetsgrenser
Tips
- caddy fmt --overwrite /etc/caddy/Caddyfile holder filen lesbar
- Bruk import-snippets når du har mange lignende nettsteder
- For Docker er imagen caddy:alpine med en montert Caddyfile vanlig
- Jokertegnsertifikater trenger en DNS-modul og API-token — beskytt den tokenen
- Les journalctl -u caddy før du skriver om hele filen
Caddy på en VPS er: offisiell pakke, en kort Caddyfile, portene 80/443 åpne, DNS som allerede peker på serveren, og systemd reload etter redigeringer. Bruk den som statisk filserver eller som reversproxy foran Gunicorn, Node eller Docker. Automatisk HTTPS virker når ACME kan svare på port 80; hvis utstedelsen mislykkes, fiks DNS og portkonflikter før du skylder på Caddy. Sikkerhetskopier /var/lib/caddy hvis du installerer på nytt ofte.