Что такое Caddy и зачем использовать его как прокси-сервер?
Caddy — современный веб-сервер с автоматическим HTTPS, написанный на Go. Его используют как мощный прокси-сервер для маршрутизации трафика, балансировки нагрузки и обеспечения безопасности. Ключевые причины выбрать Caddy:
- Автоматическое получение и обновление SSL-сертификатов от Let’s Encrypt
- Простая конфигурация через лаконичный Caddyfile
- Встроенная поддержка HTTP/2 и QUIC (HTTP/3)
- Минимальные требования к ресурсам
Ключевые преимущества Caddy для проксирования
Caddy превосходит традиционные решения (Nginx, Apache) в сценариях проксирования благодаря:
- Zero-Config TLS: HTTPS включается автоматически без ручных настроек.
- Обратное проксирование в 1 строку: Директива
reverse_proxy
маршрутизирует запросы за секунды. - Вебсокеты и gRPC: Нативная поддержка современных протоколов.
- Модульность: Плагины для кэширования, сжатия и геофильтрации.
Настройка Caddy в качестве прокси-сервера: пошаговое руководство
Шаг 1: Установка
Для 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
Шаг 2: Базовый Caddyfile
Создайте /etc/caddy/Caddyfile
с конфигурацией:example.com {
reverse_proxy localhost:8080
}
Где localhost:8080
— ваш бэкенд-сервер.
Шаг 3: Запускsudo systemctl restart caddy
Расширенные функции проксирования в Caddy
Балансировка нагрузки:reverse_proxy node1:80 node2:80 node3:80 {
lb_policy round_robin
}
Кастомные заголовки:reverse_proxy localhost:3000 {
header_up X-Real-IP {remote_host}
}
Фильтрация по IP:@blocked {
remote_ip 192.168.0.0/16
}
respond @blocked 403
Примеры конфигураций прокси-сервера Caddy
Пример 1: Прокси + статикаapp.example.com {
root * /var/www/html
file_server
reverse_proxy /api/* localhost:8000
}
Пример 2: WebSocket Proxychat.example.com {
reverse_proxy localhost:4000 {
transport http {
versions h2c
}
}
}
Часто задаваемые вопросы о Caddy Proxy
Q: Как ограничить пропускную способность прокси?
A: Используйте плагин http.handlers.limit
в Caddyfile:reverse_proxy backend {
@slow path /downloads/*
limit @slow 1mb
}
Q: Совместим ли Caddy с Docker?
A: Да, используйте официальный образ:docker run -d -p 80:80 -p 443:443 -v $PWD/Caddyfile:/etc/caddy/Caddyfile caddy
Q: Как добавить аутентификацию?
A: Через директиву basicauth
:reverse_proxy localhost:8080
basicauth {
user1 JDJhJDE0JFpGZ0VLTk9oQWlqQWJBbFFLdHVLQWVPd2U3VVVpR0p0Vk9iWTRTQ1h0dS5sV0VlV2dP
}
Q: Можно ли кэшировать ответы бэкенда?
A: Да, с плагином http.handlers.cache
:reverse_proxy localhost:3000 {
cache
cache_ttl 10m
}