Hoe om Caddy-webbediener met outomatiese HTTPS te installeer
Installeer Caddy op Ubuntu vanaf die amptelike bewaarplek, skryf 'n Caddyfile vir statiese werwe en reverse proxies, verstaan outomatiese sertifikate, systemd, logboeke, en algemene foute wanneer jy vanaf Nginx migreer.

Caddy is 'n webbediener wat TLS-sertifikate by verstek verkry en hernu. Vir 'n klein VPS wat een of twee domeine host, verwyder dit 'n hele klas Certbot-tydhouers en Nginx-snitlêers. Die konfigurasietaal (Caddyfile) is kort. Reverse proxy, gzip, en HTTP/2 is normale kenmerke, nie 'n naweek van ekstra modules nie.
Nginx is steeds die regte keuse vir sommige winkels: jy het al gevegsgetoetsde konfigs, of jy het 'n baie spesifieke module nodig. Hierdie gids is vir die ander algemene geval — jy wil HTTPS hê wat op 'n vars Hiddence-VPS werk sonder om include-snitte te memoriseer. Ons installeer Caddy vanaf die amptelike apt-repo, verduidelik hoe dit met Let's Encrypt praat, dien 'n statiese werf, proxy 'n plaaslike toepassing, host verskeie domeine, kyk na logboeke, en dek die gewone poort-80-gevegte met Apache of 'n ou Nginx.
Wanneer Caddy 'n goeie pas is
Outomatiese HTTPS is die opskrif, maar die daaglikse wen is minder bewegende onderdele. Caddy luister op 80 en 443, herlei HTTP na HTTPS, en stoor sertifikate in sy datagids. Jy het steeds 'n domein nodig wat na die VPS wys. Jy moet steeds nie ACME breek nie (firewall 80/tcp, geen ander proses wat :80 steel nie). Wildcard-sertifikate benodig 'n DNS-verskaffer-module — dit is 'n langer pad as 'n enkelgasheer-sertifikaat.
- Outomatiese HTTP→HTTPS en sertifikaathernuwing
- Leesbare Caddyfile in plaas van lang bedienerblokke
- Bevoegde reverse proxy vir Node, Python, PHP-FPM via ekstra konfig, of Docker-backends
- HTTP/2 en moderne TLS-verstekke sonder 'n syferspreadsheet
- systemd-eenheid vanaf die amptelike pakket
Vereistes
'n Domein moet na hierdie VPS resolve voordat Caddy ACME HTTP-01 kan bewys. As DNS nog propageer, sal Caddy uitreiking misluk en weer probeer; dit lyk of 'Caddy stukkend is' wanneer dit slegs DNS is. Stop eers Apache of Nginx as hulle 80/443 besit.
- Ubuntu 22.04 of 24.04
- 'n Domein A-rekord na die VPS-IP (en AAAA as jy IPv6 gebruik)
- Poorte 80 en 443 vry en toegelaat in die firewall
- Root of sudo
Stap 1: Installeer Caddy vanaf die amptelike bewaarplek
Moenie 'n ewekansige ou Caddy vanuit die verstek Ubuntu universe installeer as jy huidige TLS- en ACME-gedrag wil hê nie. Die Caddy-projek dokumenteer 'n apt-bron. Na installasie bestaan die caddy-gebruiker en die diens is geaktiveer.
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-pagerStap 2: Eerste Caddyfile — statiese werf
Die verstek-Caddyfile is /etc/caddy/Caddyfile. Vervang dit met jou domein. Caddy sal probeer om 'n sertifikaat te kry sodra die konfig laai as die gasheernaam nie localhost is nie. Sit werflêers in 'n gids wat deur die caddy-gebruiker leesbaar is (dikwels www-data-styl toestemmings, maar die pakket gebruik gebruiker 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 -fStap 3: Reverse-proxy 'n plaaslike toepassing
As Gunicorn, Node, of Docker op 127.0.0.1:8000 luister, moet Caddy die enigste publieke proses wees. Die reverse_proxy-direktief stuur Host- en X-Forwarded-*-kopskrifte op 'n sinvolle manier vir die meeste toepassings aan. As die toepassing absolute HTTP-URL's genereer, stel die vertroude proxy- / HTTPS-vlae in die toepassing (Django SECURE_PROXY_SSL_HEADER, Express trust proxy, ensovoorts).
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
# }Stap 4: Firewall en systemd
Laat 80 en 443 toe. Caddy se eenheid is caddy.service; herlaai is genoeg na Caddyfile-redigasies as die proses gesond is. As jy omgewingsveranderlikes vir 'n DNS-inprop verander, is 'n volle herbegin duideliker. Sertifikate leef by verstek onder /var/lib/caddy/.local/share/caddy/ — sluit daardie pad in rugsteune in as jy om tempolimiete tydens 'n herinstallasie omgee.
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/Stap 5: Logboeke, kompressie en kopskrifte
Toegangslogboeke help wanneer 'n bot 'n pad hamer of wanneer jy 404's ontfout. Jy kan per werf log. Voeg sekuriteitskopskrifte by as jy 'n blaaitoepassing host; moenie 'n reuse-kopskrifpakket kopieer sonder om HSTS te verstaan nie (sodra jy 'n lang max-age stel, onthou blaaiers dit).
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 caddyStap 6: PHP en ander ekstra's
Caddy kan met PHP-FPM praat met die php_fastcgi-direktief. Dit is genoeg vir baie WordPress- of Laravel-gashere, maar jy het steeds php-fpm geïnstalleer en 'n soketpad wat pas nodig. As jy al 'n perfekte Nginx-PHP-konfig het, is migreer in een aand opsioneel — Caddy skitter meer op reverse proxy + staties + outomatiese 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-fpmMigreer vanaf Nginx sonder stilstandverrassings
Stop Nginx voordat jy Caddy begin of hulle sal om 80/443 veg. Verlaag DNS-TTL die dag tevore as jy ook IP's skuif. Toets met curl --resolve sodat jy die nuwe VPS kan tref voordat jy die A-rekord oorskakel. Hou Nginx-konfigs 'n week in git in geval jy moet terugrol.
- systemctl stop nginx && systemctl disable nginx
- Installeer Caddy, valideer Caddyfile, begin Caddy
- curl -I --resolve example.com:443:NEW_IP https://example.com
- Eers dan verander DNS as die IP nuut is
- Heruitreiking is outomaties; moenie ook Certbot teen dieselfde gasheernaam laat loop nie
Foutopsporing
ACME-mislukkings is byna altyd DNS, firewall, of 'n ander diens op poort 80. Caddy-logreëls noem tls.obtain. As die werf op HTTP werk maar nie HTTPS nie, is uitreiking nooit voltooi nie. As jy te veel sertifikate sien, het jy Let's Encrypt-tempolimiete getref — gebruik die staging-CA terwyl jy toets, nie produksie nie.
- validate misluk: Caddyfile-sintaksis, ontbrekende hakie
- toestemming geweier op root: chown caddy vir die werfgids
- bind: address already in use — ss -tulpn | grep -E ':80|:443'
- sertifikaat-tydverstreke: dig +short die domein vanaf die VPS, ufw allow 80
- 502 reverse_proxy: agterkant af, of jy het verkeerd na localhost vanaf 'n houernetwerk geproxy
Sekuriteitsnotas
Caddy se TLS-verstekke is konserwatief. Jou werk is toepassingsekuriteit en SSH. Moenie die Caddy-admin-API op 'n publieke koppelvlak aktiveer nie. Die verstek-admin-eindpunt is plaaslik; laat dit so. As jy 'n Caddyfile van die internet gebruik, lees elke matcher — 'n snit wat reverse_proxies /* na 'n interne IP doen kan 'n oop proxy word.
- Moenie die admin-API blootstel nie
- Hou die pakket opgedateer
- HSTS eers nadat jy seker is HTTPS werk vir alle gasheernname
- Skei toets- en produksiegasheernname om ACME-tempolimiete te beskerm
Wenke
- caddy fmt --overwrite /etc/caddy/Caddyfile hou die lêer leesbaar
- Gebruik import-snitte wanneer jy baie soortgelyke werwe het
- Vir Docker is die caddy:alpine-beeld met 'n gemonteerde Caddyfile algemeen
- Wildcard-sertifikate benodig 'n DNS-module en API-token — beskerm daardie token
- Lees journalctl -u caddy voordat jy die hele lêer herskryf
Caddy op 'n VPS is: amptelike pakket, 'n kort Caddyfile, poorte 80/443 oop, DNS wys al na die bediener, en systemd reload na redigasies. Gebruik dit as 'n statiese lêerbediener of as 'n reverse proxy voor Gunicorn, Node, of Docker. Outomatiese HTTPS werk wanneer ACME op poort 80 kan antwoord; as uitreiking misluk, maak DNS en poortkonflikte reg voordat jy Caddy blameer. Rugsteun /var/lib/caddy as jy dikwels herinstalleer.