Каждый раз, когда в айтишных чатах всплывает тема веб-серверов, кто-то пишет: «Apache умер», «Nginx — наше всё», «за Caddy — будущее, просто попробуйте». В статье разберём, в каких случаях веб-сервер действительно нужен, в чём плюсы и минусы популярных решений и как сделать выбор под свою задачу. Детали внутри.

Веб-сервер дома

Давайте начнём с совсем простого:

Веб-сервер — это программа или устройство, которое отвечает за обработку запросов от клиентов (например, браузеров) и отдаёт им нужные виды файлов или данные.

То есть когда вы вводите адрес сайта, ваш браузер идёт к серверу, а тот достаёт нужную страницу — будь то HTML-файл, изображение или результат скрипта — и отдаёт её вам, при этом обрабатывая тысячи подобных запросов одновременно.

Обычный сервер: хранит и обрабатывает данные локально, запускает программы. Веб-сервер, в отличие от него, предназначен для обработки веб-запросов. 

Что делает веб-сервер: 

  • Работает с HTTP и HTTPS. 

  • Взаимодействует с браузерами юзеров. 

  • Предназначен для обработки статических и динамических данных. 

За последние годы в веб-серверах добавилась поддержка HTTP/3 и QUIC для ускорения передачи данных, но суть не поменялась: это такие же «посредники» между хранилищем и пользователем.

Что же до использования — представьте, как удобно развернуть в пару кликов Docker-контейнеры сразу в формате http://контейнер.мой.домен/ и в ещё один клик подключить к нему SSL. Сейчас всё больше и больше разнообразных приложений и сервисов переезжают в контейнеры, поэтому иметь свои аналоги платных сервисов на домашнем сервере —хорошее решение.

Ну а удобство для разработчиков и так понятно.

Давайте всё-таки рассмотрим сценарий: вот вы новичок, что можно интересного сделать? Начиная с самого простого — хостинга статического сайта, например, личного блога, лендинга про менторство, портфолио или документации, которая хранится как набор HTML, CSS и картинок на диске, — и заканчивая запуском какой-нибудь небольшой ML-модельки вроде локального чат-бота на базе Ollama, где сервер просто раздаёт результаты инференса по API.

Ещё можно создать ТГ-бота на Node.js или Python для уведомлений о погоде или курсах валют. Или развернуть личный Git-сервер вроде Gitea для хранения приватных репозиториев с кодом, а ещё мониторинг-дашборд на базе Uptime Kuma или Grafana, чтобы следить за состоянием всех сервисов.

Далее можно перейти к развёртыванию self-hosted — это когда вы решаете, что какие-то вещи лучше хранить у себя, а не отдавать провайдеру (фотографии, почту, умный дом, книги, и так далее). Такое часто запускают в Docker’е с изоляцией зависимостей. При этом веб-сервер становится Reverse Proxy (обратным прокси), маршрутизируя входящие запросы к соответствующим контейнерам (например, nextcloud.example.com). 

Домашний сервер не без минусов. И главные лимиты идут не от программ. К ним относится асимметричный канал связи: скорость отдачи (Upload) значительно ниже скорости загрузки (Download), что является слабым звеном для публичных сервисов. Вся ответственность за фаервол и безопасность локальной сети лежит на пользователе. 

Тут, конечно, не будет никаких SLA с красивым 99.9% аптаймом. Любое отключение света, сбой роутера или динамический IP одним махом уложат всё в оффлайн. Плюс когда сервис начинает расти, проще перенести инфраструктуру на VPS, например от UltraVDS, где доступен гарантированный канал от 200 Мбит/с, защита от DDoS до 1.5 Тбит/с и круглосуточная поддержка.

Что есть на рынке

Почему именно Nginx, Apache и Caddy? Потому что они покрывают почти все разумные сценарии, с которыми вы можете столкнуться при развёртывании домашнего сервера. Если смотреть на разные рейтинги (W3Techs, Netcraft, BuiltWith) цифры могут разниться, но в целом картина понятна. Nginx и Apache — два главных тяжеловеса, у каждого примерно 30–35% в зависимости от того, как считать. Caddy пока небольшой игрок (где-то 1-3%) но его популярность растёт очень быстро, особенно в домашних серверах и Docker-окружениях.

Nginx

Старичок Nginx был создан в 2004 году для решения проблемы C10K (обслуживание десятков тысяч одновременных подключений на одном сервере).

Источник.

Это больше, чем веб-сервер. Он может быть обратным прокси и балансировщиком для HTTP, TCP и UDP, а заодно умеет проксировать почтовые протоколы — IMAP, POP3 и SMTP. Считается, что многие крупные IT-компании и сервисы (включая те, что работают в масштабах Google, Netflix, Dropbox и др.) хотя бы частично применяют Nginx либо на фронтенде, либо для проксирования/балансировки.

  • Плюсы:

    • Событийно-ориентированная модель: асинхронная неблокирующая архитектура позволяет одному потоку обрабатывать десятки тысяч одновременных соединений.

    • Эталон обратного прокси: встроенные функции балансировки нагрузки, кэширования и терминирования SSL.

    • Высокая эффективность использования памяти: производительность при раздаче статического контента в 2−5 раз выше, чем у Apache.

  • Минусы:

    • Обработка динамического контента зависит от внешних обработчиков: требуется работа в паре с бэкенд-сервисами, такими как PHP-FPM или uWSGI.

    • Высокая стоимость расширения модулями: сторонние модули требуют перекомпиляции ядра программы.

Apache

Apache появился в 1995 году и существует уже почти 30 лет. Это был первый open-source сервер, имевший долю 70% на рынке в нулевых.

Источник.
  • Плюсы:

    • Модульная архитектура: функциональность расширяется за счёт загрузки модулей, таких как mod_rewrite, mod_ssl (более 100 официальных модулей).

    • Поддержка .htaccess: позволяет динамически изменять конфигурацию на уровне каталогов, что идеально подходит для сред виртуального хостинга.

    • Высокая совместимость: отличная поддержка динамических языков, таких как PHP и Python (через прямое встраивание с помощью mod_php).

  • Минусы:

    • Слабая производительность при высокой нагрузке: каждое соединение занимает отдельный поток/процесс, из-за чего потребление памяти растёт линейно с увеличением трафика.

    • Сложность конфигурации: требуется ручная настройка HTTPS и оптимизация режимов работы MPM.

Caddy

Caddy, созданный в 2015 году, — это HTTP/2-веб-сервер с открытым исходным кодом, написанный на языке Go. Его главные козыри — нулевая конфигурация и автоматизация. С версии 2.6 Caddy по умолчанию включает поддержку HTTP/3 (на базе QUIC).

Типовая схема: Caddy на домашнем сервере принимает входящие HTTPS‑подключения, завершает TLS и проксирует запросы к нескольким внутренним сервисам. Источник.
Типовая схема: Caddy на домашнем сервере принимает входящие HTTPS‑подключения, завершает TLS и проксирует запросы к нескольким внутренним сервисам. Источник.
  • Плюсы:

    • Автоматический HTTPS: интеграция с Let's Encrypt позволяет полностью автоматически получать и продлевать SSL-сертификаты без ручного вмешательства.

    • Развёртывание одним файлом: не требует установки зависимостей, готов к работе сразу после скачивания.

    • Декларативная конфигурация: синтаксис Caddyfile намного проще, чем у Nginx или Apache.

    Минусы:

    • Молодая экосистема: количество плагинов значительно меньше, чем у Apache/Nginx.

    • Повышенное потребление памяти: среда выполнения Go занимает около 50 МБ базовой памяти.

Веб-сервер

Производительность

Сложность настройки

Авто-HTTPS

Лучший для

Apache

Средняя

Средняя

Нет

.htaccess, PHP, старые проекты

Nginx

Высокая

Средн��я

Нет

Высоконагруженные проекты, прокси

Caddy

Высокая

Низкая

Да

Быстрый запуск, HTTPS без настройки

Минимальные конфиги

Настройка Nginx

Nginx настраивается через основной файл /etc/nginx/nginx.conf в Unix-системах — это дерево директив, сгруппированных в блоки (контексты): main для глобальных настроек, events для соединений, http для веб-трафика.​

Рекомендуемая настройка по умолчанию: worker_processes auto — Nginx сам определяет количество CPU-ядер и запускает по одному рабочему процессу на ядро для максимальной эффективности на домашнем железе.​

Базовая структура /etc/nginx/nginx.conf:

user www-data;                    # Пользователь для процессов (безопасность)
worker_processes auto;            # По 1 процессу на CPU-ядро
pid /run/nginx.pid;               # Файл с PID мастер-процесса
include /etc/nginx/modules-enabled/*.conf;  # Подключение модулей
events {                          # Блок для настроек соединений
    ...
}
http {                            # Блок для HTTP/HTTPS-трафика
    ...
}

Настройка Apache

Apache использует главный файл /etc/apache2/apache2.conf (Debian/Ubuntu) или /etc/httpd/conf/httpd.conf (CentOS), где модули подключаются через LoadModule, а виртуальные хосты — в /etc/apache2/sites-available/.​

Базовая структура:

LoadModule mpm_event_module modules/mod_mpm_event.so  # MPM-драйвер (event/worker)
Listen 80                       # Прослушивание порта
<VirtualHost *:80>              # Виртуальный хост
    ServerName example.com
    DocumentRoot /var/www/html
    <Directory /var/www/html>
        AllowOverride All       # .htaccess включён
    </Directory>
</VirtualHost>

Настройка Caddy

Caddy — один файл Caddyfile без установки, запускается ./caddy run. Авто-HTTPS из коробки.​

Пример Caddyfile для домашнего сервера:

example.com {
    root * /var/www/html       # Корень сайта
    file_server                # Раздача статических файлов
    reverse_proxy /api/* localhost:3000  # Прокси к Docker
    encode gzip                # Сжатие
}

Заключение

Если отбросить вечные споры, выбор для новичка довольно простой. Когда нужно поднять сайт или несколько Docker-сервисов «чтобы просто работало», будет достаточно Caddy. Если хочется гибкости, мощности и контроля, выбирайте Nginx. Тут конфиги чуть сложнее, но зато это эталонный reverse-proxy с большой экосистемой, гайдами и стабильностью, проверенной десятками миллионов установок. Если нужен .htaccess, старые проекты на PHP или привычная классика, Apache всё ещё жив и отлично справляется. То есть все три решения актуальны, просто решают разные задачи.