Grįžti į tinklaraštį
Rugpjūtis 19, 2026Vadovai

Kaip įdiegti Caddy žiniatinklio serverį su automatiniu HTTPS

Įdiekite Caddy Ubuntu iš oficialios saugyklos, parašykite Caddyfile statinėms svetainėms ir atvirkštiniams tarpiniams serveriams, supraskite automatinius sertifikatus, systemd, žurnalus ir dažnas klaidas migruojant iš Nginx.

Kaip įdiegti Caddy žiniatinklio serverį su automatiniu HTTPS

Caddy yra žiniatinklio serveris, kuris pagal numatymą gauna ir atnaujina TLS sertifikatus. Mažam VPS, talpinančiam vieną ar du domenus, tai pašalina visą Certbot laikmačių ir Nginx fragmentų failų klasę. Konfigūracijos kalba (Caddyfile) trumpa. Atvirkštinis tarpinis serveris, gzip ir HTTP/2 yra įprastos funkcijos, ne savaitgalis su papildomais moduliais.

Nginx vis dar teisingas pasirinkimas kai kurioms komandoms: jau turite mūšyje išbandytas konfigūracijas arba reikia labai konkretaus modulio. Šis vadovas skirtas kitam dažnam atvejui — norite HTTPS, kuris veikia šviežiame Hiddence VPS be include fragmentų įsiminimo. Įdiegsime Caddy iš oficialios apt saugyklos, paaiškinsime, kaip jis kalba su Let's Encrypt, patieksime statinę svetainę, perduosime vietinę programą, talpinsime kelis domenus, pažvelgsime į žurnalus ir apžvelgsime įprastas 80 prievado kovas su Apache ar senu Nginx.

Kada Caddy gerai tinka

Automatinis HTTPS yra antraštė, bet kasdienė nauda — mažiau judančių dalių. Caddy klauso 80 ir 443, nukreipia HTTP į HTTPS ir saugo sertifikatus savo duomenų kataloge. Vis tiek reikia domeno, nukreipto į VPS. Vis tiek reikia nesulaužyti ACME (užkarda 80/tcp, joks kitas procesas nevagia :80). Pakaitos simbolio sertifikatams reikia DNS teikėjo modulio — tai ilgesnis kelias nei vieno mazgo sertifikatas.

  • Automatinis HTTP→HTTPS ir sertifikato atnaujinimas
  • Skaitomas Caddyfile vietoj ilgų serverio blokų
  • Pajėgus atvirkštinis tarpinis serveris Node, Python, PHP-FPM su papildoma konfigūracija arba Docker galams
  • HTTP/2 ir šiuolaikiniai TLS numatytieji be šifrų skaičiuoklės
  • systemd vienetas iš oficialaus paketo

Reikalavimai

Domenas turi būti išspręstas į šį VPS, kol Caddy gali įrodyti ACME HTTP-01. Jei DNS vis dar plinta, Caddy išdavimas nepavyks ir bandys iš naujo; atrodo, kad „Caddy sulūžęs“, kai tai tik DNS. Pirmiausia sustabdykite Apache arba Nginx, jei jie valdo 80/443.

  • Ubuntu 22.04 arba 24.04
  • Domeno A įrašas į VPS IP (ir AAAA, jei naudojate IPv6)
  • 80 ir 443 prievadai laisvi ir leidžiami užkardoje
  • Root arba sudo

1 veiksmas: įdiekite Caddy iš oficialios saugyklos

Nediegikite atsitiktinio seno Caddy iš numatytojo Ubuntu universe, jei norite dabartinio TLS ir ACME elgesio. Caddy projektas dokumentuoja apt šaltinį. Po diegimo caddy naudotojas egzistuoja ir paslauga įjungta.

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

2 veiksmas: pirmasis Caddyfile — statinė svetainė

Numatytasis Caddyfile yra /etc/caddy/Caddyfile. Pakeiskite jį savo domenu. Caddy bandys gauti sertifikatą, kai tik konfigūracija įkeliama, jei mazgo vardas nėra localhost. Svetainės failus dėkite į katalogą, kurį caddy naudotojas gali skaityti (dažnai www-data stiliaus teisės, bet paketas naudoja naudotoją 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

3 veiksmas: vietinės programos atvirkštinis tarpinis serveris

Jei Gunicorn, Node ar Docker klauso 127.0.0.1:8000, Caddy turėtų būti vienintelis viešas procesas. reverse_proxy direktyva persiunčia Host ir X-Forwarded-* antraštes daugumai programų protingai. Jei programa generuoja absoliučius HTTP URL, programoje nustatykite trusted proxy / HTTPS vėliavas (Django SECURE_PROXY_SSL_HEADER, Express trust proxy ir pan.).

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

4 veiksmas: užkarda ir systemd

Leiskite 80 ir 443. Caddy vienetas yra caddy.service; reload pakanka po Caddyfile pakeitimų, jei procesas sveikas. Jei keičiate DNS papildinio aplinkos kintamuosius, viso paleidimo iš naujo aiškiau. Sertifikatai pagal numatymą gyvena /var/lib/caddy/.local/share/caddy/ — įtraukite tą kelią į atsargines kopijas, jei rūpi greičio ribos pakartotinio diegimo metu.

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/

5 veiksmas: žurnalai, glaudinimas ir antraštės

Prieigos žurnalai padeda, kai botas daužo kelią arba kai šalinate 404. Galite žurnalizuoti pagal svetainę. Pridėkite saugos antraštes, jei talpinate naršyklės programą; nekopijuokite milžiniško antraščių paketo nesuprasdami HSTS (kai nustatote ilgą max-age, naršyklės tai prisimena).

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

6 veiksmas: PHP ir kiti priedai

Caddy gali kalbėti su PHP-FPM naudojant php_fastcgi direktyvą. To pakanka daugeliui WordPress ar Laravel talpinimų, bet vis tiek reikia įdiegto php-fpm ir sutampančio lizdo kelio. Jei jau turite tobulą Nginx PHP konfigūraciją, migracija vieną vakarą neprivaloma — Caddy labiau šviečia atvirkštiniame tarpiniame serveryje + statikoje + automatiniame 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 iš Nginx be netikėtų prastovų

Sustabdykite Nginx prieš paleisdami Caddy, kitaip jie kovos dėl 80/443. Dieną prieš sumažinkite DNS TTL, jei taip pat perkeliate IP. Išbandykite su curl --resolve, kad galėtumėte pataikyti į naują VPS prieš keisdami A įrašą. Nginx konfigūracijas savaitę laikykite git, jei reikės grąžinti.

  • systemctl stop nginx && systemctl disable nginx
  • Įdiekite Caddy, patikrinkite Caddyfile, paleiskite Caddy
  • curl -I --resolve example.com:443:NEW_IP https://example.com
  • Tik tada keiskite DNS, jei IP naujas
  • Pakartotinis išdavimas automatinis; taip pat nepaleiskite Certbot tam pačiam mazgo vardui

Trikčių šalinimas

ACME gedimai beveik visada yra DNS, užkarda arba kita paslauga 80 prievade. Caddy žurnalo eilutės mini tls.obtain. Jei svetainė veikia HTTP, bet ne HTTPS, išdavimas niekada nebuvo baigtas. Jei matote per daug sertifikatų, pataikėte į Let's Encrypt greičio ribas — bandydami naudokite staging CA, ne gamybą.

  • validate nepavyksta: Caddyfile sintaksė, trūkstama riestinė
  • permission denied on root: chown caddy svetainės katalogui
  • bind: address already in use — ss -tulpn | grep -E ':80|:443'
  • certificate timeout: dig +short domeną iš VPS, ufw allow 80
  • 502 reverse_proxy: galas neveikia arba neteisingai perdavėte į localhost iš konteinerio tinklo

Saugos pastabos

Caddy TLS numatytieji konservatyvūs. Jūsų darbas — programos saugumas ir SSH. Neįjunkite Caddy administratoriaus API viešoje sąsajoje. Numatytasis administratoriaus galinis taškas vietinis; palikite taip. Jei naudojate Caddyfile iš interneto, skaitykite kiekvieną matcher — fragmentas, kuris reverse_proxies /* į vidinį IP, gali tapti atviru tarpiniu serveriu.

  • Neatskleiskite administratoriaus API
  • Laikykite paketą atnaujintą
  • HSTS tik kai esate tikri, kad HTTPS veikia visiems mazgų vardams
  • Atskirkite bandymo ir gamybos mazgų vardus, kad apsaugotumėte ACME greičio ribas

Patarimai

  • caddy fmt --overwrite /etc/caddy/Caddyfile palaiko failą skaitomą
  • Naudokite import fragmentus, kai turite daug panašių svetainių
  • Docker dažnas caddy:alpine atvaizdas su prijungtu Caddyfile
  • Pakaitos simbolio sertifikatams reikia DNS modulio ir API žetono — saugokite tą žetoną
  • Skaitykite journalctl -u caddy prieš perrašydami visą failą

Caddy VPS: oficialus paketas, trumpas Caddyfile, 80/443 prievadai atidaryti, DNS jau nukreiptas į serverį ir systemd reload po pakeitimų. Naudokite jį kaip statinių failų serverį arba atvirkštinį tarpinį serverį prieš Gunicorn, Node ar Docker. Automatinis HTTPS veikia, kai ACME gali atsakyti 80 prievade; jei išdavimas nepavyksta, pataisykite DNS ir prievadų konfliktus prieš kaltindami Caddy. Darykite /var/lib/caddy atsarginę kopiją, jei dažnai diegiate iš naujo.