Kako instalirati web poslužitelj Caddy s automatskim HTTPS
Instalirajte Caddy na Ubuntu iz službenog repozitorija, napišite Caddyfile za statičke webove i obrnute proxyje, razumijete automatske certifikate, systemd, zapisnike i uobičajene pogreške pri migraciji s Nginxa.

Caddy je web poslužitelj koji zadano dobiva i obnavlja TLS certifikate. Za mali VPS s jednom ili dvije domene to uklanja cijelu klasu Certbot tajmera i Nginx isečaka. Jezik konfiguracije (Caddyfile) kratak je. Obrnuti proxy, gzip i HTTP/2 obične su značajke, ne vikend dodatnih modula.
Nginx i dalje je pravi izbor u nekim timovima: već imate u boju provjerene confige ili treba vrlo specifičan modul. Ovaj vodič je za drugi čest slučaj — želite HTTPS koji radi na svježem Hiddence VPS bez bubanja include. Instalirat ćemo Caddy iz službenog apt repozitorija, objasniti kako priča s Let's Encrypt, poslužiti statički web, proksirati lokalnu aplikaciju, hostirati nekoliko domena, pogledati zapisnike i uobičajene borbe za port 80 s Apacheom ili starim Nginxom.
Kada Caddy dobro pristaje
Automatski HTTPS naslov je, ali dnevna pobjeda manje je pokretnih dijelova. Caddy sluša na 80 i 443, preusmjerava HTTP na HTTPS i čuva certifikate u svom direktoriju podataka. I dalje treba domena koja pokazuje na VPS. I dalje ne smijete pokvariti ACME (vatrozid 80/tcp, nijedan drugi proces da krade :80). Wildcard certifikati trebaju modul DNS pružatelja — to je duži put od certifikata za jedan host.
- Automatsko HTTP→HTTPS i obnova certifikata
- Čitljiv Caddyfile umjesto dugih blokova server
- Sposoban obrnuti proxy za Node, Python, PHP-FPM (uz dodatni config) ili Docker pozadinske usluge
- HTTP/2 i moderna zadana TLS bez tablice šifara
- systemd jedinica iz službenog paketa
Zahtjevi
Domena se mora razrješavati na ovaj VPS prije nego Caddy dokaže ACME HTTP-01. Ako se DNS još širi, Caddy neće izdati certifikat i pokušavat će ponovo; izgleda kao „Caddy je pokvaren“ a krivac je samo DNS. Prvo zaustavite Apache ili Nginx ako drže 80/443.
- Ubuntu 22.04 ili 24.04
- A zapis domene na IP VPS (i AAAA ako koristite IPv6)
- Portovi 80 i 443 slobodni i dopušteni u vatrozidu
- Root ili sudo
Korak 1. Instalirajte Caddy iz službenog repozitorija
Ne instalirajte slučajni stari Caddy iz zadanog Ubuntu universe ako želite aktualne TLS i ACME. Projekt Caddy dokumentira apt izvor. Nakon instalacije postoji korisnik caddy i usluga je uključena.
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-pagerKorak 2. Prvi Caddyfile — statički web
Zadani Caddyfile je /etc/caddy/Caddyfile. Zamijenite ga svojom domenom. Caddy će pokušati uzeti certifikat čim se config učita ako ime hosta nije localhost. Datoteke weba stavite u direktorij čitljiv korisniku caddy (često dopuštenja u stilu www-data, ali paket koristi korisnika 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 -fKorak 3. Obrnuti proxy lokalne aplikacije
Ako Gunicorn, Node ili Docker sluša na 127.0.0.1:8000, Caddy treba biti jedini javni proces. Direktiva reverse_proxy prosljeđuje Host i X-Forwarded-* razumno za većinu aplikacija. Ako aplikacija generira apsolutne HTTP URL, postavite povjerenje proxyju / HTTPS zastavice u samoj aplikaciji (Django SECURE_PROXY_SSL_HEADER, Express trust proxy i tako dalje).
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
# }Korak 4. Vatrozid i systemd
Dopustite 80 i 443. Caddy jedinica je caddy.service; reload dovoljan je nakon izmjena Caddyfile ako je proces zdrav. Ako mijenjate varijable okruženja DNS dodatka, puni restart jasniji je. Certifikati zadano leže pod /var/lib/caddy/.local/share/caddy/ — uključite tu putanju u kopije ako vam je stalo do limita pri ponovnoj instalaciji.
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/Korak 5. Zapisnici, kompresija i zaglavlja
Zapisnici pristupa pomažu kada bot lupa putanju ili kada uklanjate 404. Možete zapisivati po webu. Dodajte sigurnosna zaglavlja ako hostirate pregledničku aplikaciju; ne kopirajte ogroman paket zaglavlja bez razumijevanja HSTS (jednom postavite dugi max-age, preglednici to pamte).
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 caddyKorak 6. PHP i drugi dodaci
Caddy umije pričati s PHP-FPM direktivom php_fastcgi. To je dovoljno mnogim WordPress ili Laravel hostovima, ali i dalje treba instaliran php-fpm i putanja utičnice koja odgovara. Ako već imate savršen Nginx PHP config, migracija jedne večeri opcionalna je — Caddy više sjaji na obrnuti proxy + statiku + automatski 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-fpmMigracija s Nginxa bez iznenađenja o prekidu
Zaustavite Nginx prije nego što pokrenete Caddy ili će se tući oko 80/443. Smanjite TTL DNS dan ranije ako također selite IP. Testirajte s curl --resolve da udarite u novi VPS prije promjene A zapisa. Držite Nginx confige u gitu tjedan dana za slučaj vraćanja.
- systemctl stop nginx && systemctl disable nginx
- Instalirajte Caddy, provjerite Caddyfile, pokrenite Caddy
- curl -I --resolve example.com:443:NEW_IP https://example.com
- Tek tada promijenite DNS ako je IP nov
- Izdavanje je automatsko; ne pokrećite i Certbot protiv istog imena hosta
Rješavanje problema
ACME neuspjesi gotovo su uvijek DNS, vatrozid ili druga usluga na portu 80. Redovi zapisa Caddy spominju tls.obtain. Ako web radi na HTTP ali ne na HTTPS, izdavanje se nikad nije završilo. Ako vidite previše certifikata, udarili ste Let's Encrypt limite — na testovima koristite staging CA, ne produkciju.
- validate ne prolazi: sintaksa Caddyfile, nedostaje zagrada
- permission denied na root: chown caddy za direktorij weba
- bind: address already in use — ss -tulpn | grep -E ':80|:443'
- timeout certifikata: dig +short domene s VPS, ufw allow 80
- 502 reverse_proxy: pozadina pala ili ste proksirali na localhost iz mreže kontejnera pogrešno
Sigurnosne napomene
Zadane TLS postavke Caddyja konzervativne su. Vaš posao je sigurnost aplikacije i SSH. Ne uključujte Caddy administratorski API na javnom sučelju. Zadana administratorska krajnja točka lokalna je; ostavite je tako. Ako uzimate Caddyfile s interneta, čitajte svaki matcher — isečak koji reverse_proxies /* na unutarnji IP može postati otvoreni proxy.
- Ne izlažite administratorski API
- Držite paket ažurnim
- HSTS tek kada ste sigurni da HTTPS radi za sva imena hostova
- Razdvojite testna i produkcijska imena da zaštitite ACME limite
Savjeti
- caddy fmt --overwrite /etc/caddy/Caddyfile drži datoteku čitljivom
- Koristite import isečke kada imate mnogo sličnih webova
- U Dockeru čest je image caddy:alpine s montiranim Caddyfile
- Wildcard certifikati trebaju DNS modul i API token — čuvajte taj token
- Čitajte journalctl -u caddy prije nego što prepišete cijelu datoteku
Caddy na VPS je: službeni paket, kratak Caddyfile, otvoreni 80/443, DNS već pokazuje na poslužitelj i reload systemd nakon izmjena. Koristite ga kao poslužitelj statičkih datoteka ili kao obrnuti proxy ispred Gunicorn, Node ili Docker. Automatski HTTPS radi kada ACME umije odgovoriti na portu 80; ako izdavanje ne uspije, popravite DNS i sukobe portova prije nego što krivite Caddy. Kopirajte /var/lib/caddy ako često ponovno instalirate.