Caddy¶
Caddy — сучасний веб-сервер з автоматичним HTTPS. Використовуємо як reverse proxy.
Встановлення¶
# Ubuntu/Debian
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Конфігурація¶
Файл: /etc/caddy/Caddyfile
Базовий reverse proxy¶
example.com {
reverse_proxy localhost:3000
}
З кількома бекендами¶
example.com {
handle /api/* {
reverse_proxy localhost:8000
}
handle {
reverse_proxy localhost:3000
}
}
Статичні файли¶
static.example.com {
root * /var/www/static
file_server
}
HTTPS¶
Caddy автоматично отримує сертифікати Let's Encrypt.
Вимоги¶
- Домен направлений на сервер (A/AAAA запис)
- Порти 80 та 443 відкриті
Перевірка сертифіката¶
# Статус сертифікатів
sudo caddy list-certs
# Примусове оновлення
sudo caddy reload
Корисні сніпети¶
Security headers¶
(security) {
header {
X-Content-Type-Options nosniff
X-Frame-Options DENY
Referrer-Policy strict-origin-when-cross-origin
-Server
}
}
example.com {
import security
reverse_proxy localhost:3000
}
Gzip стиснення¶
example.com {
encode gzip
reverse_proxy localhost:3000
}
Basic Auth¶
# Генерація хешу пароля
caddy hash-password
admin.example.com {
basicauth {
admin $2a$14$hash...
}
reverse_proxy localhost:8080
}
Rate limiting¶
example.com {
rate_limit {
zone dynamic {
key {remote_host}
events 100
window 1m
}
}
reverse_proxy localhost:3000
}
Команди¶
# Перевірка конфігурації
caddy validate --config /etc/caddy/Caddyfile
# Перезавантаження без downtime
sudo systemctl reload caddy
# Статус
sudo systemctl status caddy
# Логи
sudo journalctl -u caddy -f
Приклад повної конфігурації¶
{
email admin@example.com
}
(common) {
encode gzip
header {
X-Content-Type-Options nosniff
X-Frame-Options DENY
-Server
}
}
wiki.example.com {
import common
handle /api/* {
reverse_proxy backend:8000
}
handle {
reverse_proxy frontend:3000
}
log {
output file /var/log/caddy/wiki.log
format json
}
}
Шлях: services/web/caddy.md