Каждый раз, когда в айтишных чатах всплывает тема веб-серверов, кто-то пишет: «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 всё ещё жив и отлично справляется. То есть все три решения актуальны, просто решают разные задачи.

Комментарии (32)


  1. GooseWing
    10.12.2025 10:13

    А Caddy поддерживает многопоточное скачивание и докачку файлов?


  1. gmtd
    10.12.2025 10:13

     То есть все три решения актуальны, просто решают разные задачи.

    Какие разные задачи они решает, не понял?

    Какие задачи не решаются на каждом из этих трех?


    1. JBFW
      10.12.2025 10:13

      В nginx например очень удобно свести в один сайт кучу сервисов, иногда физически находящихся в разных местах. Просто в зависимости от url будет задействован соответствующий бекенд.

      На апаче тоже можно, но сложнее


      1. ki11j0y
        10.12.2025 10:13

        А haproxy проще конфигурироаать


  1. inkelyad
    10.12.2025 10:13

    Домашний сервер - эта такая штука, на которую хотяд полдюжины человек и внешнему миру совсем не обязательно должен быть виден. Поэтому аргументы приведены, мне кажется, немного не туда.
    lighttpd еще, кстати, забыли, варианты которого работают веб-сервером, кажется, приблизительно на всех маршрутизаторах и прочих домашних железках с web управлением.


    1. drygdryg
      10.12.2025 10:13

      Далеко не на всех маршрутизаторах и IoT-устройствах сервер lighthttpd. На многих встречаются ещё более легковесные веб-серверы вроде "древнего" mini_httpd и пр. vendor-specific реализаций HTTP-сервера.


  1. Mi11er
    10.12.2025 10:13

    Для мира докера и траефика хватит..


  1. gangz
    10.12.2025 10:13

    Caddy настолько преисполнился в SSL, что даже при попытке открыть их demo домен выдёт ошибку SSL)


  1. nvladik
    10.12.2025 10:13

    После прочтения статьи сложилось впечатление, что Caddy не умеет прослушивать порты отличные от 80/443 (а это не так), так же он умеет сам выполнять какие-то скрипты и отдавать контент. Автор не знает как настроить nginx, ведь там достаточно создать файл для своего домена в sites-available и сделать ссылку на него в sites-enabled, такой подход не требует перегрузки nginx сервера, достаточно перегрузить конфиги после изменений. Для примера там есть default.conf, синтаксис может и странноватый, но прослушивать можно любой порт, даже 4675 указав, что это SSL порт... Не совсем понятно, а зачем собственно для своего домашнего сервера ssl ? Зачем вообще домашний сервер жопой в интернет выставлять ? Если Вы что-то разворачиваете, почему для этого не используется специализированный хостинг ? Белый ип для домашнего сервера тоже выкупали ?


    1. JBFW
      10.12.2025 10:13

      SSL там вот для чего: иногда удобно бывает вывести свой домашний сервер на свой же домашний планшет, прибитый к стене гвоздями, а чтобы не пилить еще и мобильное приложение - использовать PWA.

      Вот только PWA требует SSL...


      1. nvladik
        10.12.2025 10:13

        К этому вопросов нет, вопрос в том, как на локальный IP получают Let's Encrypt или все же светят жопой в интернет сервером ?


        1. masterthemac
          10.12.2025 10:13

          Не нужно никуда светить.

          Нужен домен и возможность проходить DNS challenge для получения сертификата на него, а ip может быть и в домашней сети при этом.


  1. dimka511
    10.12.2025 10:13

    А как же traefik ? Я у себя через него делаю


  1. duronus
    10.12.2025 10:13

    Я что то не понял или с какого апаче и nginx не могут работать с letsendcrypt? Для них есть нормальный бот который обновляет сертификаты и руками особо настраивать там нечего


    1. gmtd
      10.12.2025 10:13

      Работает он нормально, но сложно назвать нормальным бота, который на ubuntu для простого получения сертификата загружает херову кучу пакетов.


    1. cyberplebeian
      10.12.2025 10:13

      Они сами по себе с Let's Encrypt не работают. То о чем вы говорите называется certbot, это отдельная программа


  1. mvv-rus
    10.12.2025 10:13

    Почему именно Nginx, Apache и Caddy?

    А почему не IIS, если для домашнего веб-сервера? У пользователя наверняка на ПК стоит Windows, а в ней часто IIS уже есть. Управляется, опять-таки через GUI, простым людям так удобнее.
    Правда, если планы есть перенести сайт наружу, то IIS - это не совсем удобно: он для такого случая требует WIndows Server на VDS, а это дороже, и в плане управления никакого выигрыша нет: квалификация и понимание, что делаешь, всё равно потребуется.


    1. cyberplebeian
      10.12.2025 10:13

      Потому что IIS говнище, очевидно


      1. mvv-rus
        10.12.2025 10:13

        Обоснуете?

        PS А у меня веб-сервер, куда я книжки для читалки скидываю, именно так на IIS живет. А книжки я беру с Флибусты (светлая память stiver'у) через Tor из .onion, и, боюсь, читалку (она на каком-то древнючем Android) этому фокусу научить не получится.


        1. MkIV007
          10.12.2025 10:13

          У меня для дома таким веб сервером служит программа Calibre. Швейцарский нож книголюба :)


  1. Tathagata
    10.12.2025 10:13

    Раз уж тут про домашние веб-сервера и прокси, то озвучу свою проблему. Может, кто и подскажет оптимальное решение. А то с чат-ботами к общему знаменателю я так и не пришел.

    Имею маленький скромный homelab, на базе Proxmox. Первоначальной задачей было открыть домашний сервер Immich наружу через обратный прокси, желательно через порт 443. Доменное имя mydomain.com и SSL - ну, все, как положено. Решается, разумеется, просто: например, через NPM или чистый nginx в контейнере. Оба варианта достаточно легко настраиваются с подтягиванием сертификатов Lets' Encrypt. Удаленному пользователю достаточно ввести в браузере https://immich.mydomain.com - и вот уже окошко авторизации.

    Потом задача расширилась. Появилась необходимость организовать HTTPS-прокси (с авторизацией) для доступа извне и тоже на порту 443 (https://proxy.mydomain.com). Следуя советам чат-бота, поднял в контейнере Squid, донастроил прокси. И тут оказалось, что ни NTP, ни nginx не могут передать нормально Host через CONNECT. Поэтому Squid отвечает 400 Bad Request. Долго плясал с конфигами, следуя указаниям чат-бота, но тот водил меня как Сусанин, по кругу. И предлагал после ряда неудач вынести Squid-прокси из-под обратного прокси, разделив порты (а мне это очень нежелательно).

    В общем, проблема пока в стадии нерешенной. В какую сторону курить (Caddy, HAProxy или что-то еще) я так и не определился.

    Если подскажете, буду очень признателен.


    1. ASD2003ru
      10.12.2025 10:13

      Не совсем понятно что вы хотите, но если вам нужна авторизация для сайтов которые проксятся на вашем NPM или Nginx то можете попробовать Tinyauth. Настраивается просто и можно прикрывать сайты которые проксятся.


      1. Tathagata
        10.12.2025 10:13

        Дома у меня хостится только Immich. В нем есть своя авторизация. Более того, я на обратном пркси могу сделать дополнительную или прикрутить mTLS. С этим как раз проблем нет.

        Проблема в том, что мне нужно на базе домашнего сервера поднять HTTPS-прокси, чтобы ходить через него с работы, где у меня выход через корпоративный прокси с большими ограничениями по списку адресов. На рабочем компьютере я настрою proxychain (корпоративный HTTP-прокси -> домашний HTTPS-прокси -> сайты). В силу ограничений корпоративного прокси, доступ к домашнему должен быть исключительно по HTTPS/443. Тот же номер порта хотелось бы оставить и для доступа к домашнему Immich.

        Для этого мне нужно домашний HTTPS-прокси поставить за тем же обратным прокси (чтобы оба сервиса были на порту 443) и настроить на обратном прокси доступ извне и к нему тоже.

        Надеюсь, более понятно объяснил. Вопрос не в авторизации, а в архитектуре.


        1. Kuddesnik
          10.12.2025 10:13

          Рискну предложить вытаскивать через nginx не голый http\https прокси, а прокси который использует ws/grps в качестве транспорта. Такое умеет gost.


          1. Tathagata
            10.12.2025 10:13

            Странно, что за обратный прокси можно понапихать кучу разных сервисов, но не прямой прокси. Понимаю, что моя задача несколько специфическая, но тем не менее.


  1. aladkoi
    10.12.2025 10:13

    Ставьте Caddy, минимум настроек, сразу понимает https


    1. Kenya-West
      10.12.2025 10:13

      Плюсую. Настроек не то, что минимум, их в случае сборки homeall или lucaslorentz - нет! Раскрутил контейнер с Caddy и просто добавляешь в его сеть другие контейнеры, которым нужна морда, и Caddy сконфигурирует доступ согласно Docker labels того контейнера, которые находится внутри общей Docker-сети.


    1. boojum
      10.12.2025 10:13

      WSGI он умеет?


    1. progreccor
      10.12.2025 10:13

      Ставьте angie - сразу понимает https и умеет выпускать сертификаты сам :)


  1. MaximKiselev
    10.12.2025 10:13

    Ещё есть litespeed. Тоже достаточно известный и китайский форк nginx. По мне чем проще тем лучше. В сервере главное - скорость, наличие модулей под контент. Все равно heroku из сервера сделать не получиться, хотя nginx и пытался. И да вы как то сравнивает прокси сервер с веб-сервером, что не совсем верно. Основное что должен делать сервер - это отдавать контент, для других вещей есть более крутые решения


  1. dsrk_dev
    10.12.2025 10:13

    Оч страннася статья. На дворе 2е25 год, ну какой apache? Даже nginx это уже такое себе.
    Caddy не плохой вариант, но почему нет того же traefik?
    Ну и да, на самом деле лучше взять GoDoxy:
    — Из коробки wildcard сертефикат через dns challenge
    — Красивый дашборд, с сылочками на поднятые сервисы
    — Коороткие и удобные лейблы для докер контейнеров
    — yaml/веб для коонфигурации сервисов вне докера

    Скрытый текст


  1. progreccor
    10.12.2025 10:13

    Про то что apache имеет mpm event наверное никто не знает ?