Natrag na blog
Kolovoz 19, 2026Vodiči

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.

Kako instalirati web poslužitelj Caddy s automatskim HTTPS

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.

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

Korak 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).

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

Korak 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).

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

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.

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/

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).

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

Korak 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.

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

Migracija 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.