Како инсталирати веб сервер Caddy са аутоматским HTTPS
Инсталирајте Caddy на Ubuntu из званичног репозиторијума, напишите Caddyfile за статичке сајтове и реверзне проксије, разумејте аутоматске сертификате, systemd, логове и уобичајене грешке при миграцији са Nginx.

Caddy је веб сервер који подразумевано добија и обнавља TLS сертификате. За мали VPS са једним или два домена то уклања целу класу Certbot тајмера и Nginx исечака. Језик конфигурације (Caddyfile) је кратак. Реверзни прокси, gzip и HTTP/2 су обичне функције, не викенд додатних модула.
Nginx је и даље прави избор у неким тимовима: већ имате у боју проверене конфиге или треба веома специфичан модул. Овај водич је за други чест случај — желите HTTPS који ради на свежем Hiddence VPS без бубања include. Инсталираћемо Caddy из званичног apt репозиторијума, објаснити како прича са Let's Encrypt, послужити статички сајт, проксирати локалну апликацију, хостовати неколико домена, погледати логове и уобичајене борбе за порт 80 са Apache или старим Nginx.
Када Caddy добро пристаје
Аутоматски HTTPS је наслов, али дневна победа је мање покретних делова. Caddy слуша на 80 и 443, преусмерава HTTP на HTTPS и чува сертификате у свом директоријуму података. И даље треба домен који показује на VPS. И даље не смете да покварите ACME (заштитни зид 80/tcp, ниједан други процес да краде :80). Wildcard сертификати требају модул DNS провајдера — то је дужи пут од сертификата за један хост.
- Аутоматско HTTP→HTTPS и обнова сертификата
- Читљив Caddyfile уместо дугих блокова server
- Способан реверзни прокси за Node, Python, PHP-FPM (уз додатни конфиг) или Docker позадинске услуге
- HTTP/2 и модерна подразумевана TLS без табеле шифара
- systemd јединица из званичног пакета
Захтеви
Домен мора да се разрешава на овај VPS пре него што Caddy докаже ACME HTTP-01. Ако се DNS још шири, Caddy неће издати сертификат и покушаваће поново; изгледа као „Caddy је покварен“ а кривац је само DNS. Прво зауставите Apache или Nginx ако држе 80/443.
- Ubuntu 22.04 или 24.04
- A запис домена на IP VPS (и AAAA ако користите IPv6)
- Портови 80 и 443 слободни и дозвољени у заштитном зиду
- Root или sudo
Корак 1. Инсталирајте Caddy из званичног репозиторијума
Не инсталирајте случајни стари Caddy из подразумеваног Ubuntu universe ако желите актуелне TLS и ACME. Пројекат Caddy документује apt извор. После инсталације постоји корисник caddy и услуга је укључена.
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. Први Caddyfile — статички сајт
Подразумевани Caddyfile је /etc/caddy/Caddyfile. Замените га својим доменом. Caddy ће покушати да узме сертификат чим се конфиг учита ако име хоста није localhost. Датотеке сајта ставите у директоријум читљив кориснику caddy (често дозволе у стилу www-data, али пакет користи корисника 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 -fКорак 3. Реверзни прокси локалне апликације
Ако Gunicorn, Node или Docker слуша на 127.0.0.1:8000, Caddy треба да буде једини јавни процес. Директива reverse_proxy прослеђује Host и X-Forwarded-* разумно за већину апликација. Ако апликација генерише апсолутне HTTP URL, поставите поверење проксију / HTTPS заставице у самој апликацији (Django SECURE_PROXY_SSL_HEADER, Express trust proxy и тако даље).
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. Заштитни зид и systemd
Дозволите 80 и 443. Caddy јединица је caddy.service; reload је довољан после измена Caddyfile ако је процес здрав. Ако мењате променљиве окружења DNS додатка, пуни рестарт је јаснији. Сертификати подразумевано леже под /var/lib/caddy/.local/share/caddy/ — укључите ту путању у копије ако вам је стало до лимита при поновној инсталацији.
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. Логови, компресија и заглавља
Логови приступа помажу када бот лупа путању или када отклањате 404. Можете логовати по сајту. Додајте безбедносна заглавља ако хостујете прегледачку апликацију; не копирајте огроман пакет заглавља без разумевања HSTS (једном поставите дуг max-age, прегледачи то памте).
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. PHP и други додаци
Caddy уме да прича са PHP-FPM директивом php_fastcgi. То је довољно многим WordPress или Laravel хостовима, али и даље треба инсталиран php-fpm и путања сокета која одговара. Ако већ имате савршен Nginx PHP конфиг, миграција једне вечери је опциона — Caddy више сија на реверзни прокси + статику + аутоматски 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-fpmМиграција са Nginx без изненађења о прекиду
Зауставите Nginx пре него што покренете Caddy или ће се тући око 80/443. Смањите TTL DNS дан раније ако такође селите IP. Тестирајте са curl --resolve да ударите у нови VPS пре промене A записа. Држите Nginx конфиге у git-у недељу дана за случај враћања.
- systemctl stop nginx && systemctl disable nginx
- Инсталирајте Caddy, проверите Caddyfile, покрените Caddy
- curl -I --resolve example.com:443:NEW_IP https://example.com
- Тек онда промените DNS ако је IP нов
- Издавање је аутоматско; не покрећите и Certbot против истог имена хоста
Решавање проблема
ACME неуспеси су скоро увек DNS, заштитни зид или друга услуга на порту 80. Редови лога Caddy помињу tls.obtain. Ако сајт ради на HTTP али не на HTTPS, издавање се никад није завршило. Ако видите превише сертификата, ударили сте Let's Encrypt лимите — на тестовима користите staging CA, не продукцију.
- validate не пролази: синтакса Caddyfile, недостаје заграда
- permission denied на root: chown caddy за директоријум сајта
- bind: address already in use — ss -tulpn | grep -E ':80|:443'
- timeout сертификата: dig +short домена са VPS, ufw allow 80
- 502 reverse_proxy: позадина пала или сте проксирали на localhost из мреже контејнера погрешно
Безбедносне напомене
Подразумевана TLS Caddy су конзервативна. Ваш посао је безбедност апликације и SSH. Не укључујте Caddy администраторски API на јавном интерфејсу. Подразумевана администраторска крајња тачка је локална; оставите је тако. Ако узимате Caddyfile са интернета, читајте сваки matcher — исечак који reverse_proxies /* на унутрашњи IP може постати отворени прокси.
- Не излажите администраторски API
- Држите пакет ажурним
- HSTS тек када сте сигурни да HTTPS ради за сва имена хостова
- Раздвојите тестна и продукциона имена да заштитите ACME лимите
Савети
- caddy fmt --overwrite /etc/caddy/Caddyfile држи датотеку читљивом
- Користите import исечке када имате много сличних сајтова
- У Docker-у је чест имиџ caddy:alpine са монтираним Caddyfile
- Wildcard сертификати требају DNS модул и API токен — чувајте тај токен
- Читајте journalctl -u caddy пре него што препишете целу датотеку
Caddy на VPS је: званични пакет, кратак Caddyfile, отворени 80/443, DNS већ показује на сервер и reload systemd после измена. Користите га као сервер статичких датотека или као реверзни прокси испред Gunicorn, Node или Docker. Аутоматски HTTPS ради када ACME уме да одговори на порту 80; ако издавање не успе, поправите DNS и сукобе портова пре него што кривите Caddy. Копирајте /var/lib/caddy ако често поново инсталирате.