Tornar al blog
Agost 19, 2026Guies

Com instal·lar el servidor web Caddy amb HTTPS automàtic

Instal·leu Caddy a l'Ubuntu des del repositori oficial, escriviu un Caddyfile per a llocs estàtics i servidors intermediaris inversos, enteneu els certificats automàtics, systemd, els registres i els errors habituals en migrar des de Nginx.

Com instal·lar el servidor web Caddy amb HTTPS automàtic

Caddy és un servidor web que obté i renova certificats TLS per defecte. Per a un VPS petit que allotja un o dos dominis, això elimina tota una classe de temporitzadors Certbot i fitxers de fragments Nginx. El llenguatge de configuració (Caddyfile) és curt. El servidor intermediari invers, gzip i HTTP/2 són funcions normals, no un cap de setmana de mòduls extra.

Nginx encara és l'elecció correcta per a alguns equips: ja teniu configuracions contrastades, o necessiteu un mòdul molt específic. Aquesta guia és per a l'altre cas habitual — voleu HTTPS que funcioni en un VPS Hiddence nou sense memoritzar fragments include. Instal·larem Caddy des del repositori apt oficial, explicarem com parla amb Let's Encrypt, servirem un lloc estàtic, farem proxy d'una aplicació local, allotjarem diversos dominis, mirarem els registres i cobrirem les lluites habituals pel port 80 amb Apache o un Nginx antic.

Quan Caddy encaixa bé

L'HTTPS automàtic és el titular, però el guany diari són menys peces mòbils. Caddy escolta als 80 i 443, redirigeix HTTP a HTTPS i desa els certificats al seu directori de dades. Encara necessiteu un domini que apunti al VPS. Encara heu de no trencar ACME (tallafoc 80/tcp, cap altre procés que robi :80). Els certificats comodí necessiten un mòdul de proveïdor DNS — aquest és un camí més llarg que un certificat d'un sol amfitrió.

  • HTTP→HTTPS automàtic i renovació de certificats
  • Caddyfile llegible en lloc de blocs de servidor llargs
  • Servidor intermediari invers capaç per a Node, Python, PHP-FPM via configuració extra, o backends Docker
  • HTTP/2 i valors TLS moderns per defecte sense un full de xifres
  • Unitat systemd del paquet oficial

Requisits

Un domini ha de resoldre a aquest VPS abans que Caddy pugui demostrar ACME HTTP-01. Si el DNS encara s'està propagant, Caddy fallarà l'emissió i reintentarà; això sembla que 'Caddy està trencat' quan només és DNS. Atureu primer Apache o Nginx si tenen el 80/443.

  • Ubuntu 22.04 o 24.04
  • Un registre A del domini a la IP del VPS (i AAAA si feu servir IPv6)
  • Ports 80 i 443 lliures i permesos al tallafoc
  • Root o sudo

Pas 1: Instal·leu Caddy des del repositori oficial

No instal·leu un Caddy vell aleatori de l'universe per defecte d'Ubuntu si voleu el comportament actual de TLS i ACME. El projecte Caddy documenta una font apt. Després de la instal·lació, l'usuari caddy existeix i el servei està habilitat.

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

Pas 2: Primer Caddyfile — lloc estàtic

El Caddyfile per defecte és /etc/caddy/Caddyfile. Substituïu-lo pel vostre domini. Caddy intentarà obtenir un certificat tan bon punt es carregui la configuració si el nom d'amfitrió no és localhost. Poseu els fitxers del lloc en un directori llegible per l'usuari caddy (sovint permisos d'estil www-data, però el paquet fa servir l'usuari 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

Pas 3: Servidor intermediari invers d'una aplicació local

Si Gunicorn, Node o Docker escolten a 127.0.0.1:8000, Caddy hauria de ser l'únic procés públic. La directiva reverse_proxy reenvia les capçaleres Host i X-Forwarded-* d'una manera raonable per a la majoria d'aplicacions. Si l'aplicació genera URL HTTP absoluts, configureu els indicadors de proxy de confiança / HTTPS a l'aplicació (Django SECURE_PROXY_SSL_HEADER, Express trust proxy, i així successivament).

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

Pas 4: Tallafoc i systemd

Permeteu 80 i 443. La unitat de Caddy és caddy.service; recarregar n'hi ha prou després d'edicions del Caddyfile si el procés està sa. Si canvieu variables d'entorn per a un connector DNS, un reinici complet és més clar. Els certificats viuen per defecte sota /var/lib/caddy/.local/share/caddy/ — incloeu aquest camí a les còpies de seguretat si us importen els límits de velocitat durant una reinstal·lació.

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/

Pas 5: Registres, compressió i capçaleres

Els registres d'accés ajuden quan un bot pica un camí o quan depureu 404. Podeu registrar per lloc. Afegiu capçaleres de seguretat si allotgeu una aplicació de navegador; no copieu un paquet enorme de capçaleres sense entendre HSTS (un cop establiu un max-age llarg, els navegadors el recorden).

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

Pas 6: PHP i altres extres

Caddy pot parlar amb PHP-FPM amb la directiva php_fastcgi. N'hi ha prou per a molts allotjaments WordPress o Laravel, però encara necessiteu php-fpm instal·lat i un camí de sòcol que coincideixi. Si ja teniu una configuració PHP de Nginx perfecta, migrar en una sola tarda és opcional — Caddy brilla més en servidor intermediari invers + estàtic + TLS automàtic.

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

Migrar des de Nginx sense sorpreses de temps d'inactivitat

Atureu Nginx abans d'engegar Caddy o lluitaran pel 80/443. Baixeu el TTL del DNS el dia abans si també moveu IP. Proveu amb curl --resolve per poder pegar al VPS nou abans de canviar el registre A. Conserveu les configuracions de Nginx a git una setmana per si heu de tornar enrere.

  • systemctl stop nginx && systemctl disable nginx
  • Instal·leu Caddy, valideu el Caddyfile, engegueu Caddy
  • curl -I --resolve example.com:443:NEW_IP https://example.com
  • Només llavors canvieu el DNS si la IP és nova
  • La reemissió és automàtica; no executeu també Certbot contra el mateix nom d'amfitrió

Resolució de problemes

Les fallades ACME són gairebé sempre DNS, tallafoc o un altre servei al port 80. Les línies de registre de Caddy esmenten tls.obtain. Si el lloc funciona a HTTP però no a HTTPS, l'emissió no s'ha completat mai. Si veieu massa certificats, heu tocat els límits de velocitat de Let's Encrypt — utilitzeu la CA d'assaig mentre proveu, no la de producció.

  • validate falla: sintaxi del Caddyfile, clau que falta
  • permís denegat a root: chown caddy per al directori del lloc
  • bind: address already in use — ss -tulpn | grep -E ':80|:443'
  • temps d'espera del certificat: dig +short el domini des del VPS, ufw allow 80
  • 502 reverse_proxy: el backend està caigut, o heu fet proxy a localhost des d'una xarxa de contenidors de manera incorrecta

Notes de seguretat

Els valors TLS per defecte de Caddy són conservadors. La vostra feina és la seguretat de l'aplicació i SSH. No activeu l'API d'administració de Caddy en una interfície pública. L'extrem d'administració per defecte és local; deixeu-ho així. Si feu servir un Caddyfile d'internet, llegiu cada matcher — un fragment que reverse_proxies /* a una IP interna pot convertir-se en un proxy obert.

  • No exposeu l'API d'administració
  • Mantingueu el paquet actualitzat
  • HSTS només després d'estar segurs que HTTPS funciona per a tots els noms d'amfitrió
  • Separeu els noms d'amfitrió de prova i de producció per protegir els límits de velocitat ACME

Consells

  • caddy fmt --overwrite /etc/caddy/Caddyfile manté el fitxer llegible
  • Utilitzeu fragments import quan tingueu molts llocs similars
  • Per a Docker, la imatge caddy:alpine amb un Caddyfile muntat és habitual
  • Els certificats comodí necessiten un mòdul DNS i un token d'API — protegiu aquest token
  • Llegiu journalctl -u caddy abans de reescriure tot el fitxer

Caddy en un VPS és: paquet oficial, un Caddyfile curt, ports 80/443 oberts, DNS que ja apunta al servidor, i systemd reload després de les edicions. Utilitzeu-lo com a servidor de fitxers estàtics o com a servidor intermediari invers davant de Gunicorn, Node o Docker. L'HTTPS automàtic funciona quan ACME pot respondre al port 80; si l'emissió falla, arregleu el DNS i els conflictes de ports abans de culpar Caddy. Feu còpia de /var/lib/caddy si reinstal·leu sovint.