Перейти до основного вмісту
Знижка 50% усі плани, обмежений час. Від $2.48/mo
Залишилося: 12 хв
Веб та бізнес-додатки

Caddy проти Nginx на VPS: порівняння файлів конфігурації

A Автор: Ariana 12 хв читання
Side-by-side terminal view of a Caddyfile and an nginx.conf for the same reverse proxy on a VPS

Новий VPS, домен спрямований на нього, і одна команда відділяє вас від працюючого вебсервера. Те, що ви наберете далі, встановить або Caddy, або Nginx, і це одне рішення визначає, скільки часу ви витрачатимете на TLS протягом усього життя машини. Отже: Caddy проти Nginx на VPS, який із них ви встановлюєте?

Далі йдуть ті самі три конфігурації, налаштовані в обох інструментах, пліч-о-пліч, із повідомленими цифрами пам'яті, підводним каменем wildcard-сертифікатів і практичними нотатками щодо міграції, якщо ви вже на Nginx.

Коротко

  • Висновок: Caddy для більшості нових навантажень VPS, особливо для розробників-одинаків, невеликих команд і TLS за принципом «налаштував і забув». Обирайте Nginx, коли вам потрібна його екосистема модулів, явне тонке налаштування, наявний досвід команди чи найменший можливий слід у пам'яті.
  • Автоматичний HTTPS: Caddy сам отримує та поновлює сертифікати. Ні Certbot, ні cron, ні хука перезавантаження. Nginx потребує Certbot (або іншого ACME-клієнта) та автоматизації поновлення навколо нього.
  • Пам'ять: Nginx стрункіший завдяки C замість Go. Ця різниця рідко щось вирішує на сучасному плані; цифри в таблиці нижче.
  • Підводний камінь: Caddy не є безконфігураційним для wildcard. Ім'я на кшталт *.example.com потребує DNS-виклику, що означає плагін та API-токен.

Усе порівняння на одному екрані:

CaddyNginx
МоваGoC
Автоматичний HTTPSВбудований (Let's Encrypt + ZeroSSL)Немає; потребує Certbot чи іншого ACME-клієнта
Багатослівність конфігураціїМінімальна (кілька рядків на сайт)Явна й багатослівна
HTTP/3Увімкнено за замовчуванням з HTTPSДоступний з 1.25.0; його потрібно ввімкнути в конфігурації Nginx. Складання з початкового коду потребує --with-http_v3_module.
Повідомлена пам'ять у стані спокою15-25 MB2-8 MB
Повідомлена пам'ять при 1 000 з'єднань80-120 MB50-80 MB
Екосистема модулівМенша, розширюється через xcaddyВелика й зріла
ЛіцензіяApache 2.0BSD-2-Clause

Діапазони пам'яті взято з одного стороннього тесту на VPS і їх слід розглядати як орієнтовні, а не універсальні вимоги. Фактичне використання залежить від версій програмного забезпечення, увімкнених модулів, журналювання, трафіку та методології тестування. Інформація про версії та ліцензії взята з офіційних репозиторіїв проєктів.

Автоматичний HTTPS у Caddy (і що він насправді замінює)

How Caddy's automatic HTTPS replaces the Nginx plus Certbot workflow by handling certificate issuance, renewal, and HTTP-to-HTTPS redirects inside the server

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-сертифікатів нижче.

Файли конфігурації, пліч-о-пліч

The same HTTPS reverse proxy written as a short Caddyfile and a longer nginx.conf server block, side by side

Ось три поширені конфігурації 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-апстриму, як наведений вище, Caddy передає вхідний Host заголовок далі й встановлює X-Forwarded-For, X-Forwarded-Proto, і X-Forwarded-Host за замовчуванням. У Nginx ви зазвичай додаєте проксі-заголовки явно, коли апстриму потрібні оригінальний хост, схема та ланцюжок клієнтських адрес. Ось компроміс у мініатюрі: 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 не перейменувала її, як зазначено в документації basic_auth Caddy, і старі посібники досі збивають людей із пантелику через це.

Порада: Той хеш у Caddyfile — це не пароль. Це вивід bcrypt з caddy hash-password. Виконайте команду, вставте те, що вона виводить. Caddy відмовляється від паролів у відкритому тексті в конфігурації, що є правильним стандартом і невеликою несподіванкою першого разу.

Конфігурації говорять самі за себе. Caddy згортає TLS, розумні проксі-заголовки та перенаправлення в кілька рядків; Nginx явний і багатослівний і дає вам кожен важіль. Якщо ви провели роки в Nginx, багатослівність — це м'язова пам'ять, а контроль — це суть. Якщо ні, Caddyfile — це конфігурація, яку ви можете тримати в голові. Практичний висновок простий: конфігурацію Caddy легше читати з першого погляду, тоді як Nginx дає вам більше явного контролю.

Продуктивність і пам'ять: уважне читання тестів

Reading Caddy vs Nginx benchmarks carefully: Nginx generally uses less memory and leads on throughput, but the margin depends heavily on hardware and workload

Опубліковані тести вказують у тому самому загальному напрямку: Nginx зазвичай використовує менше пам'яті й часто лідирує за чистою пропускною здатністю, але розмір цієї переваги сильно залежить від середовища.

In одному сторонньому тесті на чотириядерній VM, Nginx досяг приблизно 48 000 запитів на секунду порівняно з приблизно 42 000 для Caddy. Той самий тест повідомив про затримку HTTPS p99 у 2,1 мс для Nginx і 2,4 мс для Caddy. Розглядайте це як результати однієї конфігурації, а не універсальний запас продуктивності.

Діапазони пам'яті в порівняльній таблиці взято з окремого тесту на VPS. Ще один синтетичний тест при 50 000 одночасних з'єднаннях повідомив про 145 MB для Nginx і 520 MB для Caddy, але цей тест використовував істотно інші умови обладнання й навантаження. Його абсолютні цифри не слід порівнювати безпосередньо з наведеними вище цифрами VPS.

Надійний висновок вужчий: Nginx загалом має менший слід у пам'яті й схильний лідирувати за навантажень із високою пропускною здатністю чи високою одночасністю. Для звичайного зворотного проксі на малому чи середньому VPS обидва зазвичай достатньо швидкі, тож операційна простота часто є кориснішим вирішальним фактором.

Висновок розділу: обирайте на основі операцій, якщо тільки ваш сервер не обмежений у пам'яті або ваші власні навантажувальні тести не показують, що пропускна здатність проксі є вузьким місцем.

Підводний камінь wildcard-сертифіката (Caddy не завжди безконфігураційний)

The wildcard certificate catch: a cert for a star-dot-example.com name needs DNS-01 validation, which means a DNS-provider plugin and an API token, not Caddy's default zero-config path

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 (що переноситься, а що ні)

Migrating from Nginx to Caddy: reverse-proxy headers, PHP blocks, and WebSocket handling get shorter, while custom modules and complex rewrites need a manual rethink

Якщо ви вже на Nginx і зважуєте перехід, почніть зі зниження очікувань щодо автоматизації: є адаптер конфігурації NGINX для Caddy, але він неповний і його не слід розглядати як надійний шлях міграції в один прохід. Міграція з Nginx на Caddy — це здебільшого ручне переписування, і більша його частина стає коротшою.

Що переноситься й стає простішим, згідно з посібником з конвертації від спільноти Caddy:

  • Для HTTP-апстримів 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, яка зберігає свою конфігурацію в базі даних застосунку, використовує веб-UI на port 81 і керує хостами зворотного проксі та сертифікатами через цей інтерфейс. Ядро Nginx налаштовується текстовими файлами й не має власного GUI.

Коли мені використовувати Nginx замість Caddy?

Обирайте Nginx, коли вам потрібен тонкий контроль, конкретний модуль з його зрілої екосистеми, кожен останній MB на сервері, обмеженому в пам'яті, обслуговування статичних файлів з високою одночасністю або коли ваша команда вже має глибокий досвід у Nginx.

Поділитися

Обговорення

Коментарі

Увійдіть, щоб долучитися до обговорення.

Більше з блогу

Продовжуйте читати.

Захищена маркетингова панель із даними підписників і керуванням поштовими кампаніями
Веб та бізнес-додатки

Як маркетинговим командам розгортати застосунки, створені ШІ, не розкриваючи дані підписників

Створені ШІ маркетингові застосунки можуть розкрити списки підписників, API-ключі та записи про згоду. Дізнайтеся про перевірки для безпечнішого розгортання й дотримання правил…

Varys 30 хв читання
Бізнес-інструменти, підключені до CRM, і безпека даних клієнтів
Веб та бізнес-додатки

Як бізнес-командам розгортати застосунки, створені ШІ, без розкриття даних клієнтів

Дані клієнтів у застосунках ШІ: що відкривають витоки ключів CRM, як виправити помилки розгортання та чого вимагають GDPR, CCPA і закон ЄС про ШІ.

Flint 26 хв читання
Фінансова панель, створена ШІ, зі щитом, що захищає фінансові записи
Веб та бізнес-додатки

Як фінансовим командам розгортати застосунки, створені ШІ, без витоку фінансових даних

Як застосунки, створені ШІ, для фінансових команд розкривають дані головної книги, розрахунку зарплати та облікові дані ERP, як виправити кожну помилку готовим запитом і які…

Emti 22 хв читання

Готові розгортати? Від $2,48/міс.

Незалежна хмара з 2008 року. AMD EPYC, NVMe, 40 Gbps. Повернення коштів за 14 днів.