Новый VPS, на него направлен домен, и до работающего веб-сервера остаётся одна команда. Следующее, что вы наберёте, установит либо Caddy, либо Nginx, и это одно решение определяет, сколько времени вы потратите на TLS за всю жизнь машины. Итак: Caddy против Nginx на VPS, какой из них устанавливать?
Далее — одни и те же три конфигурации, настроенные в обоих инструментах бок о бок, с заявленными показателями памяти, подвохом с wildcard-сертификатами и практическими заметками о миграции, если вы уже на Nginx.
Кратко
- Вывод: Caddy — для большинства свежих нагрузок на VPS, особенно для разработчиков-одиночек, небольших команд и подхода «настроил и забыл» к TLS. Выбирайте Nginx, когда вам нужна его экосистема модулей, явная тонкая настройка, уже имеющийся опыт команды или минимально возможное потребление памяти.
- Авто-HTTPS: Caddy сам получает и обновляет сертификаты. Ни Certbot, ни cron, ни хука перезагрузки. Nginx нужен Certbot (или другой ACME-клиент) и автоматизация обновления вокруг него.
- Память: Nginx экономичнее благодаря C вместо Go. Этот разрыв редко что-то решает на современном тарифе; цифры — в таблице ниже.
- Подвох: Caddy не является zero-config для wildcard-сертификатов. Имя вроде *.example.com требует DNS-проверки, а это означает плагин и API-токен.
Всё сравнение на одном экране:
| Caddy | Nginx | |
|---|---|---|
| Язык | Go | C |
| Автоматический HTTPS | Встроен (Let's Encrypt + ZeroSSL) | Нет; нужен Certbot или другой ACME-клиент |
| Многословность конфигурации | Минимальная (несколько строк на сайт) | Явная и многословная |
| HTTP/3 | Включён по умолчанию вместе с HTTPS | Доступен с 1.25.0; его нужно включить в конфигурации Nginx. Сборки из исходников требуют --with-http_v3_module. |
| Заявленное потребление памяти в простое | 15-25 MB | 2-8 MB |
| Заявленное потребление памяти при 1 000 соединений | 80-120 MB | 50-80 MB |
| Экосистема модулей | Меньше, расширяется через xcaddy | Большая и зрелая |
| Лицензия | Apache 2.0 | BSD-2-Clause |
Диапазоны памяти взяты из одного стороннего теста на VPS и их следует рассматривать как ориентировочные, а не универсальные требования. Реальное потребление зависит от версий ПО, включённых модулей, логирования, трафика и методики тестирования. Информация о версиях и лицензиях взята из официальных репозиториев проектов.
Автоматический HTTPS в Caddy (и что он на самом деле заменяет)
Caddy сам получает и обновляет TLS-сертификаты. Направьте публичный домен на машину, запустите Caddy, и он получит сертификат от Let's Encrypt или ZeroSSL, а затем обновит его в фоне. Ни Certbot, ни cron-задачи, ни хука перезагрузки после обновления. Вот автоматический HTTPS в Caddy в одном предложении, и именно ради этого люди переходят.
Под капотом Caddy использует проверку HTTP-01 (port 80) или TLS-ALPN-01 (port 443) , чтобы подтвердить владение доменом, а затем поддерживает сертификат актуальным без участия какого-либо второго инструмента.
Эквивалент для Nginx использует отдельный ACME-клиент. При распространённом certbot --nginx процессе Certbot может получить и установить сертификат, а затем повторно использовать тот же плагин и сохранённые параметры при обновлении. Большинство установок Certbot также включают запланированную задачу, которая запускается certbot renew автоматически.
Если вы используете certbot certonly или другой ACME-клиент, который лишь записывает обновлённые файлы на диск, добавьте хук развёртывания , который перезагружает Nginx после успешного обновления. Такая схема работает, но всё равно оставляет больше движущихся частей, чем Caddy: веб-сервер, ACME-клиент, планировщик обновлений и любой хук развёртывания остаются отдельными компонентами.
Операционное преимущество Caddy в том, что выпуск сертификата, его развёртывание, обновление и перенаправления с HTTP на HTTPS встроены в сам сервер. По умолчанию Caddy начинает попытки обновления, когда остаётся примерно одна треть срока действия сертификата, 30 дней для 90-дневного сертификата, если только удостоверяющий центр не задаёт другое окно обновления.
Совет: Стандартным ACME-проверкам Caddy нужна публичная доступность на port 80 или 443: HTTP-01 использует port 80, а TLS-ALPN-01 использует port 443. Если port 80 заблокирован, но 443 открыт, TLS-ALPN всё ещё может сработать; если машина не обращена в интернет, используйте DNS-01, как и для wildcard-сертификатов ниже.
Файлы конфигурации бок о бок
Вот три распространённые конфигурации VPS — обратный прокси с HTTPS, раздача статических файлов и базовая аутентификация — написанные для обоих инструментов. Примеры для Caddy включают автоматический HTTPS. Примеры для Nginx предполагают, что сертификат уже подготовлен, а примеры со статическими файлами и базовой аутентификацией показывают только блок HTTPS-сервера. Повторно используйте блок перенаправления с port 80 из первого примера, если хотите эквивалентное поведение перенаправления с HTTP на HTTPS.
Обратный прокси к локальному приложению на port 3000:
Caddyfile
example.com {
reverse_proxy localhost:3000
}
nginx.conf
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
Строки TLS в блоке Nginx предполагают, что Certbot уже отработал. Для HTTP-upstream вроде приведённого выше Caddy передаёт входящий Host заголовок дальше и устанавливает X-Forwarded-For, X-Forwarded-Proto, и X-Forwarded-Host по умолчанию. В Nginx вы обычно добавляете прокси-заголовки явно, когда upstream'у нужны исходный хост, схема и цепочка адресов клиента. Вот компромисс в миниатюре: Caddy поставляется с практичными настройками прокси по умолчанию, тогда как Nginx делает большую часть этого поведения явной.
Раздача статических файлов:
Caddyfile
example.com {
root * /var/www
file_server
}
nginx.conf
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /var/www;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Базовая аутентификация, защищающая всё за именем пользователя и паролем:
Caddyfile
example.com {
basic_auth {
Bob $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG
}
reverse_proxy localhost:3000
}
nginx.conf
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Оба инструмента хешируют пароль отдельно. Caddy использует caddy hash-password; Nginx использует htpasswd для создания файла .htpasswd. Директива — basic_auth в текущем Caddy, кстати. Она называлась basicauth , пока в v2.8.0 её не переименовали, как отмечено в документации Caddy по basic_auth, , и старые руководства до сих пор на этом спотыкают людей.
Совет: Этот хеш в Caddyfile — не пароль. Это результат bcrypt из
caddy hash-password. Запустите команду, вставьте то, что она выведет. Caddy отказывается принимать пароли открытым текстом в конфигурации, что является правильной настройкой по умолчанию и небольшим сюрпризом в первый раз.
Конфигурации говорят сами за себя. Caddy сворачивает TLS, разумные прокси-заголовки и перенаправление в несколько строк; Nginx явен и многословен и даёт вам каждую ручку управления. Если вы годами работали в Nginx, эта многословность — мышечная память, а контроль — в этом весь смысл. Если нет, Caddyfile — это конфигурация, которую вы можете держать в голове. Практический вывод прост: конфигурацию Caddy легче читать с одного взгляда, тогда как Nginx даёт вам больше явного контроля.
Производительность и память: как внимательно читать бенчмарки
Опубликованные тесты указывают в одном общем направлении: Nginx обычно использует меньше памяти и часто лидирует по чистой пропускной способности, но размер этого преимущества сильно зависит от среды.
In одном стороннем тесте на четырёхъядерной ВМ, Nginx достиг примерно 48,000 запросов в секунду по сравнению с около 42,000 у Caddy. Тот же тест сообщил о задержке p99 для HTTPS в 2.1 ms у Nginx и 2.4 ms у Caddy. Воспринимайте это как результаты одной конфигурации, а не универсальный запас производительности.
Диапазоны памяти в сравнительной таблице взяты из отдельного теста на VPS. Ещё один синтетический тест при 50,000 одновременных соединений сообщил о 145 MB для Nginx и 520 MB для Caddy, но в этом тесте использовались существенно иное оборудование и условия нагрузки. Его абсолютные цифры не следует напрямую сравнивать с приведёнными выше показателями VPS.
Надёжный вывод уже: Nginx, как правило, имеет меньшее потребление памяти и обычно лидирует при нагрузках с высокой пропускной способностью или высокой конкурентностью. Для обычного обратного прокси на VPS малого-среднего размера обоих обычно достаточно быстро, так что операционная простота часто оказывается более полезным решающим фактором.
Вывод раздела: выбирайте исходя из эксплуатации, если только ваш сервер не ограничен по памяти или ваши собственные нагрузочные тесты не показывают, что узким местом является пропускная способность прокси.
Подвох с wildcard-сертификатом (Caddy не всегда zero-config)
Caddy может автоматизировать wildcard-сертификаты, но не своими стандартными проверками HTTP-01 или TLS-ALPN-01. Сертификат для *.example.com требует проверки DNS-01, которую Let's Encrypt требует для wildcard-сертификатов. Это означает плагин DNS-провайдера (встроенный в ваш бинарник Caddy через xcaddy) плюс API-токен для вашего DNS-хостинга, настроенные в блоке tls. Это не та история «набери одну строчку и уходи», которую рекламирует Caddy.
Это бьёт по пользователям домашних лабораторий, которые размещают множество сервисов под реальным доменом, которым владеют, например *.home.example.com, и полагают, что выпуск wildcard-сертификата так же автоматичен, как app.example.com. Для чисто внутренних имён вроде *.homelab.internal, относитесь к этому как к территории локального/внутреннего PKI, а не публичного wildcard-сертификата Let's Encrypt. Если точнее: Caddy прекрасно справляется с wildcard-сертификатами, просто не делает этого стандартными проверками, и настройка на ступень сложнее случая с одним доменом. Nginx здесь в той же лодке, поскольку требование DNS-01 исходит от Let's Encrypt, а не от сервера.
Если вам нужен GUI: Nginx Proxy Manager (короткое отступление)
Nginx Proxy Manager — это совсем другое животное, чем два инструмента выше, и он заслуживает одного абзаца, потому что название сбивает людей с толку. NPM — это GUI-обёртка над Nginx: он управляет правилами обратного прокси и сертификатами Let's Encrypt через веб-интерфейс на port 81. Это не ядро Nginx, и настраивается он не так, как ядро Nginx.
Компромисс здесь обычный — «клик против конфигурации». NPM — это простая кнопка, пока вы не сойдёте с проторённой дорожки. Его конфигурация управляется через базу данных приложения, а не через единственный редактируемый вручную файл конфигурации. Стандартная установка через Docker использует SQLite, тогда как MySQL/MariaDB и PostgreSQL поддерживаются как варианты внешних баз данных. Эта разница также влияет на переносимость: конфигурацию Caddy часто можно перенести, скопировав единственный Caddyfile, тогда как развёртывание Nginx Proxy Manager требует, чтобы его данные приложения и база данных были сохранены. NPM — хороший выбор, если вы искренне предпочитаете клики редактированию и ваша конфигурация остаётся простой. Это неправильный выбор для рабочего процесса «инфраструктура как код».
Миграция с Nginx на Caddy (что переносится, а что нет)
Если вы уже на Nginx и взвешиваете переход, начните с того, что снизьте свои ожидания по части автоматизации: у Caddy есть адаптер конфигурации NGINX, но он неполный, и его не следует рассматривать как надёжный путь миграции в один заход. Миграция с Nginx на Caddy — это в основном ручное переписывание, и большая её часть становится короче.
Что переносится и упрощается, согласно руководству по конвертации от сообщества Caddy:
- Для HTTP-upstream'ов
reverse_proxyпередаёт входящийHostзаголовок дальше и устанавливает стандартные заголовки X-Forwarded-* по умолчанию, так что большая часть этихproxy_set_headerстрок исчезает. - PHP сворачивается из блока location с
try_filesплюсfastcgi_passплюс кучей параметров в единственнуюphp_fastcgiдирективу. - Обработка WebSocket в Caddy v2 автоматическая. Если руководство советует вам добавить отдельную
websocketдирективу, это пережиток Caddy v1. Игнорируйте его.
Что не переносится автоматически: всё, что завязано на конкретный модуль Nginx, которого у Caddy нет, сложная логика rewrite и location, которую придётся переосмыслить, а не перенести, и настройки wildcard-сертификатов, которые возвращают вас к настройке DNS-проверки из раздела выше. Заложите время на модули и переписывания; остальное обычно даёт чистое сокращение числа строк.
Какой из них устанавливать? (Решение)
Вы видели конфигурации, цифры, подвох с wildcard-сертификатами и стоимость миграции, так что вот к чему всё сводится. Устанавливайте Caddy, если вы разработчик-одиночка или небольшая команда, это свежее развёртывание на VPS, вам нужен TLS по принципу «настроил и забыл», вы запускаете Docker с простой маршрутизацией или вам просто нужна конфигурация, которая укладывается в мышечную память. Это большинство читающих это.
Устанавливайте Nginx, если вам нужен тонкий контроль или конкретный модуль из его зрелой экосистемы, вы выжимаете производительность из сервера, ограниченного по памяти, вы занимаетесь раздачей статических файлов с высокой конкурентностью или у вашей команды уже есть глубокий опыт работы с Nginx и куча рабочих конфигураций. Это веские причины, и если одна из них — ваша, Nginx — правильный выбор. Это не тот случай, когда более старый инструмент — неправильный инструмент.
На чём бы вы ни остановились, следующий шаг — установить его на машину. Оба Caddy и Nginx доступны как развёртывания в один клик в нашем маркетплейсе, так что вы можете пропустить работу по установке и перейти сразу к Caddyfile или блоку сервера. VPS на 1 GB — разумная отправная точка для развёртывания одного сайта с невысоким трафиком, но подбирайте размер сервера под приложение и трафик за прокси, а не под один лишь прокси. Если вы используете Caddy как парадную дверь для самостоятельно размещаемых сервисов, он может стоять перед стеком мониторинга Prometheus и Grafana или развёртыванием Uptime Kuma без необходимости в отдельном инструментарии TLS.
Вывод раздела: выбирайте Caddy, если только у вас нет конкретной причины, указывающей на Nginx.
Часто задаваемые вопросы
Заменяет ли Caddy Certbot?
Да. Caddy может сам получать и обновлять публичные сертификаты, включая wildcard-сертификаты, так что Certbot не требуется. Wildcard-сертификатам нужна проверка DNS-01, что означает настройку совместимого модуля DNS-провайдера и учётных данных API.
Использует ли Caddy меньше памяти, чем Nginx?
Нет. У Nginx, как правило, меньшее потребление памяти. Один сторонний тест на VPS сообщил о 2-8 MB в простое у Nginx и 15-25 MB у Caddy, но эти цифры зависят от нагрузки, а не являются фиксированными требованиями к памяти. Разница важнее всего на серверах, ограниченных по памяти, где запущено несколько сервисов.
Быстрее ли Caddy, чем Nginx?
Это зависит от нагрузки. Оба обычно достаточно быстры для типичного трафика обратного прокси на VPS. В приведённых тестах, Nginx лидировал по чистой пропускной способности и эффективности памяти, но размер разницы существенно менялся в зависимости от оборудования, характера трафика и уровня конкурентности. Нет единого процента, применимого к каждому развёртыванию.
Поддерживает ли Caddy wildcard-сертификаты SSL?
Да. Wildcard-сертификат вроде *.example.com требует проверки DNS-01. Как только у Caddy есть совместимый модуль DNS-провайдера и учётные данные API, он может получать и обновлять wildcard-сертификат автоматически.
То же ли самое Nginx Proxy Manager, что и Nginx?
Нет. Nginx Proxy Manager — это GUI-обёртка над Nginx, которая хранит свою конфигурацию в базе данных приложения, использует веб-интерфейс на port 81 и управляет хостами обратного прокси и сертификатами через этот интерфейс. Ядро Nginx настраивается текстовыми файлами и не имеет собственного GUI.
Когда мне следует использовать Nginx вместо Caddy?
Выбирайте Nginx, когда вам нужен тонкий контроль, конкретный модуль из его зрелой экосистемы, каждый последний MB на сервере, ограниченном по памяти, раздача статических файлов с высокой конкурентностью или у вашей команды уже есть глубокий опыт работы с Nginx.