Как настроить VirtualHost Apache в Ubuntu
При размещении нескольких сайтов на одном сервере нужно сделать так, чтобы каждый домен корректно обслуживался. Для этого настраиваются виртуальные хосты — VirtualHost. Они позволяют разделять ресурсы, привязывать разные доменные имена к своим каталогам, делать настройки для каждого проекта. Разберемся, как организовать виртуальный хост Apache в Ubuntu.

Установка Apache
Apache на Ubuntu можно установить через пакетный менеджер APT. Перед установкой обновите пакеты и списки зависимостей:

Установите Apache с помощью команды:
После установки и первого запуска проверьте статус службы:
По умолчанию Apache слушает порт 80. Корневая директория (DocumentRoot) для сайта по умолчанию указана в конфигурационном файле /etc/apache2/sites-available/000-default.conf и равна /var/www/html.
После установки служба будет автоматически запускаться. Управлять ей необходимо через systemd. В таблице — основные команды для ручного управления:
Действие | Команда |
Запуск Apache | sudo systemctl start apache2 |
Остановка Apache | sudo systemctl stop apache2 |
Перезапуск службы | sudo systemctl restart apache2 |
Включение автозапуска при старте системы | sudo systemctl enable apache2 |
Начальная настройка Apache
После установки Apache убедитесь, что веб-сервер нормально работает и доступен для пользователей. Если все в порядке, переходите к базовым настройкам — изменению конфигурации брандмауэра и проверку состояния службы.
Настройка брандмауэра
На Ubuntu для управления брандмауэром (основанным на netfilter/iptables) часто используется утилита UFW (Uncomplicated Firewall). Во время установки Apache в конфигурации должны появиться профили, которые позволяют открывать необходимые для работы веб-сервера порты. Проверьте их наличие с помощью команды:
Должны быть такие профили:
Apache — порт 80 (HTTP);
Apache Secure — порт 443 (HTTPS);
Apache Full — порты 80 и 443.
Если нужен доступ только по HTTP, выполните:
Если хотите использовать HTTPS, выполните:
Проверьте статус брандмауэра и применение настроек:
Если UFW не работает, включите его командой:
После активации настроек веб-сервер будет принимать входящие соединения на портах, которые вы открыли.
Проверка состояния сервера
После настроек проверьте, что служба Apache запустилась и правильно обрабатывает запросы:
Если служба запущена, вы увидите статус active или running в строке состояния. Дальше убедитесь, что слушается порт 80:
Затем проверьте доступность сервера, открыв в своем браузере адрес:
Если вы верно выполнили все шаги установки, откроется стандартная стартовая страница Apache.
Альтернативный вариант проверки — через командную строку:
О корректной работе веб-сервера говорит статус HTTP/1.1 200 OK, который должен появиться в ответе.
Настройка виртуального хоста
В Ubuntu конфигурационные файлы виртуальных хостов находятся в каталоге /etc/apache2/sites-available/. Настройки можно осуществлять с помощью стандартных утилит Apache.
Настройка виртуального хостаПодготовка структуры директорий
Для удобства администрирования и изоляции проектов создайте для каждого сайта отдельный каталог в /var/www/. Пример команды, которая позволит создать директорию:
Назначьте владельца директории для управления файлами. Это должен быть пользователь, от имени которого работаете вы или другой член команды. Пример:
Задайте для пользователя права доступа:
Чтобы проверить работу сайта, создайте тестовую страницу:
В конфигурацию добавьте минимальное содержимое, например:
Сохраните файл и настройки. Теперь каталог сайта можно подключать в конфигурации Apache.
Создание конфигурационного файла виртуального хоста
Файлы виртуальных хостов в Ubuntu создаются в каталоге /etc/apache2/sites-available/. Это можно сделать с помощью команды:
Базовая конфигурация виртуального хоста может выглядеть так:
Описание основных директив:
ServerName — главный домен сайта.
ServerAlias — дополнительные имена.
DocumentRoot — путь к каталогу сайта.
Directory — перечень параметров доступа.
ErrorLog и CustomLog — файлы логов.
После внесения изменений проверьте неправильно синтаксиса конфигурации. В этом поможет команда:
Если все настроено правильно, вы увидите сообщение Syntax OK.
Активация конфигурации
После создания конфигурационного файла включите виртуальный хост. С помощью утилиты a2ensite активируйте нужный сайт:
Если какой-то сайт нужно отключить по умолчанию, выполните команду вида:
После выполнения этих команд перезапустите веб-сервер Apache:
Если хотите полностью перезапустить систему, выполните команду:
Для проверки доступности сайта в браузере введите доменное имя, которое было указано в ServerName. Если еще не настроили DNS, в файл /etc/hosts добавьте временную запись. Этот вариант подойдет для тестирования работоспособности сайта.
Настройка файла hosts
Для сопоставления доменных имен и IP-адресов используется файл /etc/hosts. Система сначала его проверяет, затем обращается к DNS. Таким образом можно тестировать виртуальный хост в Apache HTTP Server без изменения публичных DNS-записей. Метод работает на той машине, где хранится и редактируется файл.
Чтобы работать с файлом, нужно сначала открыть его от имени пользователя с правами администратора:
В каждой строке файла нужно указать IP-адреса и соответствующие имена хостов. Выглядит это примерно так:
Если сайт расположен на другом сервере, нужно указать его IP:
Имя example.local должно быть таким, какое указано в директиве ServerName в конфигурации виртуального хоста Apache.
Внесите записи и сохраните файл. Проверьте соответствие адресов и доменов:
Должен вернуться IP, который указан в /etc/hosts. Если все верно, откройте сайт в браузере:
Если все правильно настроено, сервер корректно обработать запрос в соответствии с конфигурацией. Если кеширование DNS идет через systemd-resolved, перезапустите службу:
Чтобы устройство использовала внешнее разрешение имен, после публикации DNS-записей удалите соответствующую строку из /etc/hosts.
Настройка файлаТестирование конфигурации
После включения виртуального хоста проверьте корректность конфигурации, чтобы вовремя обнаружить синтаксические ошибки и проблемы. Выполните команду:
Либо:
Если конфигурация правильная, вы увидите ответ Syntax OK. При наличии ошибок — проблемный файл и строку. Как это может выглядеть:
Откройте файл и исправьте ошибку:
Затем снова выполните sudo apachectl configtest и при наличии корректного ответа от сервера примените изменения:
Если после изменений хотите перезапустить веб-сервер, выполните:
Если есть проблемы с доступом к сайту, проверьте логи в каталоге /var/log/apache2/. Ошибки конфигурации и выполнения команд отображаются в файле error.log:
Чтобы избежать проблем в работе сайта, также проверьте следующие моменты:
совпадение директивы ServerName с именем, которое указано в файле /etc/hosts;
Наличие каталога, указанного в DocumentRoot;
Наличие у пользователя достаточных прав на чтение файлов.
Настройка SSL для виртуального хоста
Чтобы подключить защищенное соединение для сайта, настроенного в Apache через VirtualHost, нужно настроить SSL и установить сертификат. Это можно сделать с помощью Certbot.
Установка SSL-сертификатов
Обновите список пакетов, установите Certbot и плагин для Apache:
Проверьте, что активирован модуль SSL:
Запустите процесс получения сертификата:
Certbot проверит домен, предложит выбрать виртуальный хост, автоматически получит сертификат, добавит путь к нему и создаст конфигурацию для рабочего порта. Сертификат по умолчанию сохраняется в /etc/letsencrypt/live/домен/.
После завершения установки сертификата Certbot перезапустит веб-сервер. После повторной загрузки проверьте доступность сайта:
Certbot также автоматически настраивает механизм продления сертификата по окончании срока годности, используя systemd-таймер или cron (в зависимости от способа установки). Проверить корректность настройки можно с помощью команды:
Если все настроено правильно, сертификат будет автоматически продлеваться.
Чтобы центр сертификации мог проверить сайт, доменное имя ресурса должно указывать на сервер по публичному IP-адресу. Также извне должен быть доступен порт 80.
Обновление конфигурации виртуального хоста для SSL
Откройте файл виртуального хоста:
Добавьте подобный блок:
Проверьте конфигурацию:
Для перенаправления HTTP-трафика на HTTPS добавьте на порту 80 в виртуальный хост следующие настройки:
Убедитесь, что в брандмауэре открыт порт 443:
Проверьте состояние службы:
Советы по безопасности и оптимизации
После настройки виртуального хоста позаботьтесь о безопасности и стабильной работе. Даем рекомендации по защите веб-сервера и оптимизации производительности.
Защита сервера
В Ubuntu Apache запускается от имени системного пользователя www-data. Действовать от имени root с правами администратора не стоит. Проверьте, что у www-data есть необходимые полномочия без избыточности.
Дальше проверьте список подключенных модулей:
Есть какие-то не используются, отключите их, чтобы уменьшить поверхность потенциальной атаки. Например:
Также стоит явно задать правила доступа к служебным каталогам. Пример:
Для закрытых каталогов правило может выглядеть так:
Желательно скрыть сведения о системе и версию Apache. Для этого в файле /etc/apache2/conf-available/security.conf выполните следующие настройки:
После настроек примените команду:
Дополнительные меры безопасности для снижения рисков атак:
Мера | Команда, настройки |
Для снижения рисков перебора паролей используйте fail2ban — инструмент для анализа логов и автоматической блокировки подозрительных IP-адресов после нескольких неудачных попыток входа | sudo apt install fail2ban |
Если сервер доступен извне, разрешите в настройках брандмауэра только необходимые порты | sudo ufw allow OpenSSH sudo ufw allow 'Apache Full' sudo ufw enable |
Регулярно обновляйте систему, модули и пакеты инструментов для обеспечения безопасности | sudo apt update sudo apt upgrade |
Используйте для дополнительной защиты модуль mod_security | sudo apt install libapache2-mod-security2 sudo a2enmod security2 sudo systemctl reload apache2 |
Оптимизация производительности
За производительность Apache в Ubuntu отвечает выбранная Multi-Processing Module (MPM) модель. В основном используется mpm_event, которая подходит для большинства сценариев. Проверить свою модель можно с помощью команды:
Параметры можно настроить в /etc/apache2/mods-available/mpm_*.conf. В зависимости от объема памяти сервера укажите значения StartServers, MaxRequestWorkers и ServerLimit.
Для оптимизации производительности через модуль mod_deflate можно включить сжатие ответов:
Например, настройка может выглядеть так:
Для настройки заголовков кеширования статического контента (которые указывают браузеру клиента, как долго хранить файлы, сокращая количество повторных запросов) используется модуль mod_expires:
Пример настройки:
Если в конфигурации виртуального хоста для директивы AllowOverride установлено значение, отличное от None (например, All), Apache будет проверять наличие файлов .htaccess в каждом каталоге запрашиваемого пути, что может снижать производительность. Перенесите директивы из .htaccess в основную конфигурацию виртуального хоста и установите AllowOverride None.
Нагрузку на сервер и производительность можно контролировать с помощью логов /var/log/apache2/ и утилит top, htop и команды journalctl -u apache2.
Современный подход к обработке логов и метрик
Если ваш сайт на Apache генерирует тысячи запросов в секунду, традиционный анализ логов через tail -f или top перестает быть эффективным. Для мониторинга больших нагрузок (например, при балансировке нескольких виртуальных хостов) необходима потоковая обработка данных в реальном времени.
В корпоративной среде эту задачу решает Evolution Managed Kafka от Cloud.ru — полностью управляемый кластер Apache Kafka®. Он позволяет собирать логи со всех ваших веб-серверов в единый поток, анализировать поведение пользователей без задержек и оперативно реагировать на аномалии в работе виртуальных хостов. Вы получаете готовую инфраструктуру для observability, не отвлекаясь на настройку брокеров.
Заключение
Правильно организованный виртуальный хост помогает изолировать проекты друг от друга и обеспечить безопасность соединений. Apache в Ubuntu можно настроить без стороннего ПО. После базовых настроек ограничьте права доступа для пользователей, отключите лишние модули. В процессе эксплуатации следите за обновлениями и нагрузкой на сервер.

