🟢 Caddy

Веб-сервер с автоматическим HTTPS: Caddyfile, реверс-прокси, статика, редиректы и команды.

Шпаргалки · Администрирование · #caddy #webserver #https #proxy

Особенность

Caddy сам получает и продлевает TLS-сертификаты (Let's Encrypt, ZeroSSL) и включает HTTPS по умолчанию. Конфигурация короткая: файл Caddyfile.

Установка и запуск

sudo apt install -y caddy             # Debian, Ubuntu (репозиторий Caddy)
caddy run --config Caddyfile          # на переднем плане
caddy start / stop / reload --config Caddyfile
caddy validate --config Caddyfile
caddy fmt --overwrite Caddyfile
sudo systemctl reload caddy

Docker: docker run -d -p 80:80 -p 443:443 -v $PWD/Caddyfile:/etc/caddy/Caddyfile caddy.

Статический сайт

example.com {
    root * /var/www/html
    file_server
    encode zstd gzip
}

Для получения сертификата домен должен указывать на сервер, порты 80 и 443 открыты.

Реверс-прокси

app.example.com {
    reverse_proxy localhost:3000
}

api.example.com {
    reverse_proxy 10.0.0.11:8080 10.0.0.12:8080 {
        lb_policy round_robin
        health_uri /health
    }
}

Маршрутизация и редиректы

example.com {
    redir /old /new permanent
    handle /api/* {
        reverse_proxy localhost:8080
    }
    handle {
        root * /var/www/spa
        try_files {path} /index.html
        file_server
    }
}

www.example.com {
    redir https://example.com{uri} permanent
}

handle выбирает один блок, handle_path отрезает префикс.

Безопасность и заголовки

example.com {
    header {
        Strict-Transport-Security "max-age=31536000"
        X-Content-Type-Options nosniff
        -Server
    }
    basicauth /admin/* {
        admin $2a$14$...           # хэш: caddy hash-password
    }
    request_body { max_size 10MB }
    log { output file /var/log/caddy/access.log }
}

Локальная разработка

localhost {
    reverse_proxy localhost:5173
}

Caddy выпустит локальный сертификат: caddy trust установит корневой.

Переменные и модули

Плейсхолдеры {host}, {uri}, {remote_host}, переменные среды {$ENV_VAR}. Wildcard-сертификаты через DNS-challenge требуют плагина (xcaddy build --with ...). Admin API на localhost:2019 позволяет менять конфигурацию на лету.

Caddy, Nginx или Apache

Caddy проще в настройке и сам делает HTTPS. Nginx популярнее и тоньше настраивается под высокие нагрузки. Apache силён модулями и .htaccess.