Tillbaka till bloggen
Augusti 19, 2026Guider

Hur du installerar Caddy-webbservern med automatisk HTTPS

Installera Caddy på Ubuntu från det officiella arkivet, skriv en Caddyfile för statiska sajter och omvända proxys, förstå automatiska certifikat, systemd, loggar och vanliga misstag när du migrerar från Nginx.

Hur du installerar Caddy-webbservern med automatisk HTTPS

Caddy är en webbserver som hämtar och förnyar TLS-certifikat som standard. För en liten VPS som hostar en eller två domäner tar det bort en hel klass av Certbot-timers och Nginx-snippet-filer. Konfigurationsspråket (Caddyfile) är kort. Omvänd proxy, gzip och HTTP/2 är vanliga funktioner, inte en helg med extra moduler.

Nginx är fortfarande rätt val för vissa butiker: ni har redan stridstestade configs, eller ni behöver en mycket specifik modul. Den här guiden är för det andra vanliga fallet — du vill ha HTTPS som fungerar på en färsk Hiddence-VPS utan att memorera include-snippets. Vi installerar Caddy från det officiella apt-arkivet, förklarar hur det pratar med Let's Encrypt, serverar en statisk sajt, proxysar en lokal app, hostar flera domäner, tittar på loggar och täcker de vanliga port-80-bråken med Apache eller en gammal Nginx.

När Caddy är en bra passform

Automatisk HTTPS är rubriken, men den dagliga vinsten är färre rörliga delar. Caddy lyssnar på 80 och 443, omdirigerar HTTP till HTTPS och lagrar certifikat i sin datakatalog. Du behöver fortfarande en domän som pekar på VPS:en. Du behöver fortfarande att inte förstöra ACME (brandvägg 80/tcp, ingen annan process som stjäl :80). Jokerteckencertifikat behöver en DNS-providermodul — det är en längre väg än ett certifikat för en enda värd.

  • Automatisk HTTP→HTTPS och certifikatförnyelse
  • Läsbar Caddyfile i stället för långa serverblock
  • Kapabel omvänd proxy för Node, Python, PHP-FPM via extra config, eller Docker-backends
  • HTTP/2 och moderna TLS-standarder utan ett chifferkalkylark
  • systemd-enhet från det officiella paketet

Krav

En domän måste resolva till den här VPS:en innan Caddy kan bevisa ACME HTTP-01. Om DNS fortfarande propagerar misslyckas Caddy med utfärdande och försöker igen; det ser ut som 'Caddy är trasig' när det bara är DNS. Stoppa Apache eller Nginx först om de äger 80/443.

  • Ubuntu 22.04 eller 24.04
  • En domän-A-post till VPS-IP:n (och AAAA om du använder IPv6)
  • Portarna 80 och 443 lediga och tillåtna i brandväggen
  • Root eller sudo

Steg 1: Installera Caddy från det officiella arkivet

Installera inte en slumpmässig gammal Caddy från standard-Ubuntu universe om du vill ha aktuell TLS- och ACME-beteende. Caddy-projektet dokumenterar en apt-källa. Efter installationen finns caddy-användaren och tjänsten är aktiverad.

bash
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-pager

Steg 2: Första Caddyfile — statisk sajt

Standard-Caddyfile är /etc/caddy/Caddyfile. Ersätt den med din domän. Caddy försöker hämta ett certifikat så fort konfigurationen laddas om värdnamnet inte är localhost. Lägg sajtfiler i en katalog som caddy-användaren kan läsa (ofta www-data-liknande behörigheter, men paketet använder användaren caddy).

bash
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 -f

Steg 3: Omvänd proxy för en lokal applikation

Om Gunicorn, Node eller Docker lyssnar på 127.0.0.1:8000 ska Caddy vara den enda publika processen. Direktivet reverse_proxy vidarebefordrar Host och X-Forwarded-*-headers på ett vettigt sätt för de flesta appar. Om appen genererar absoluta HTTP-URL:er, sätt trusted proxy / HTTPS-flaggor i appen (Django SECURE_PROXY_SSL_HEADER, Express trust proxy, och så vidare).

bash
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: Brandvägg och systemd

Tillåt 80 och 443. Caddys enhet är caddy.service; reload räcker efter Caddyfile-redigeringar om processen är frisk. Om du ändrar miljövariabler för ett DNS-plugin är en full omstart tydligare. Certifikat ligger under /var/lib/caddy/.local/share/caddy/ som standard — inkludera den sökvägen i säkerhetskopior om du bryr dig om hastighetsgränser vid ominstallation.

bash
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: Loggar, komprimering och headers

Åtkomstloggar hjälper när en bot hamrar en sökväg eller när du felsöker 404:or. Du kan logga per sajt. Lägg till säkerhetsheaders om du hostar en webbläsarapp; kopiera inte ett enormt headerpaket utan att förstå HSTS (när du sätter en lång max-age minns webbläsare det).

bash
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 caddy

Steg 6: PHP och andra tillägg

Caddy kan prata med PHP-FPM med direktivet php_fastcgi. Det räcker för många WordPress- eller Laravel-värdar, men du behöver fortfarande php-fpm installerat och en socket-sökväg som matchar. Om du redan har en perfekt Nginx PHP-config är migrering på en kväll valfritt — Caddy lyser mer på omvänd proxy + statiskt + automatisk TLS.

bash
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-fpm

Migrera från Nginx utan oväntade avbrott

Stoppa Nginx innan du startar Caddy, annars slåss de om 80/443. Sänk DNS TTL dagen innan om du också flyttar IP:er. Testa med curl --resolve så att du kan träffa den nya VPS:en innan du byter A-posten. Behåll Nginx-configs i git en vecka ifall du behöver rulla tillbaka.

  • systemctl stop nginx && systemctl disable nginx
  • Installera Caddy, validera Caddyfile, starta Caddy
  • curl -I --resolve example.com:443:NEW_IP https://example.com
  • Ändra DNS först därefter om IP:n är ny
  • Återutfärdande är automatiskt; kör inte också Certbot mot samma värdnamn

Felsökning

ACME-fel är nästan alltid DNS, brandvägg eller en annan tjänst på port 80. Caddy-loggrader nämner tls.obtain. Om sajten fungerar på HTTP men inte HTTPS slutfördes aldrig utfärdandet. Om du ser för många certifikat har du träffat Let's Encrypt-hastighetsgränser — använd staging-CA medan du testar, inte produktion.

  • validate misslyckas: Caddyfile-syntax, saknad klammer
  • permission denied on root: chown caddy för sajtkatalogen
  • bind: address already in use — ss -tulpn | grep -E ':80|:443'
  • certificate timeout: dig +short domänen från VPS:en, ufw allow 80
  • 502 reverse_proxy: backend nere, eller du proxade till localhost från ett containernätverk felaktigt

Säkerhetsanteckningar

Caddys TLS-standarder är konservativa. Ditt jobb är applikationssäkerhet och SSH. Aktivera inte Caddys admin-API på ett publikt gränssnitt. Standardens admin-endpoint är lokal; lämna den så. Om du använder en Caddyfile från internet, läs varje matcher — en snippet som reverse_proxies /* till en intern IP kan bli en öppen proxy.

  • Exponera inte admin-API:t
  • Håll paketet uppdaterat
  • HSTS bara när du är säker på att HTTPS fungerar för alla värdnamn
  • Separera test- och produktionsvärdnamn för att skydda ACME-hastighetsgränser

Tips

  • caddy fmt --overwrite /etc/caddy/Caddyfile håller filen läsbar
  • Använd import-snippets när du har många liknande sajter
  • För Docker är imagen caddy:alpine med en monterad Caddyfile vanlig
  • Jokerteckencertifikat behöver en DNS-modul och API-token — skydda den token
  • Läs journalctl -u caddy innan du skriver om hela filen

Caddy på en VPS är: officiellt paket, en kort Caddyfile, portarna 80/443 öppna, DNS som redan pekar på servern och systemd reload efter redigeringar. Använd den som statisk filserver eller som omvänd proxy framför Gunicorn, Node eller Docker. Automatisk HTTPS fungerar när ACME kan svara på port 80; om utfärdandet misslyckas, fixa DNS och portkonflikter innan du skyller på Caddy. Säkerhetskopiera /var/lib/caddy om du installerar om ofta.