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

UMTC Wiki © 2026 | Ukrainian Military Tactical Communications