- Home »

Настройка виртуальных хостов Apache на Ubuntu 24
В этой статье разберёмся, что такое виртуальные хосты Apache, зачем они нужны и как их быстро поднять на свежей Ubuntu 24. Если вы хотите раздавать несколько сайтов с одного сервера или просто навести порядок в конфиге, без виртуальных хостов не обойтись. Расскажу, как всё работает, как не наломать дров с DocumentRoot и SSL, покажу реальные примеры, дам советы и поделюсь лайфхаками по автоматизации. Поехали!
Как это работает?
- Виртуальные хосты (Virtual Hosts) — это способ Apache обслуживать несколько сайтов (доменов) на одном сервере. Каждый сайт — отдельная конфигурация, своя папка, свои логи.
- Работает через директиву
<VirtualHost>
в конфиге. Apache смотрит, к какому домену пришёл запрос, и подсовывает нужные настройки. - Есть два типа: name-based (по имени домена, 99% случаев) и IP-based (редко, когда у вас несколько IP-шников).
Пошаговая настройка на Ubuntu 24
Всё просто, если не бояться терминала:
- Установите Apache (если ещё нет):
sudo apt update sudo apt install apache2
- Проверьте статус:
systemctl status apache2
- Создайте директории для сайтов:
sudo mkdir -p /var/www/site1.ru/public_html sudo mkdir -p /var/www/site2.ru/public_html
Права и владелец:
sudo chown -R $USER:$USER /var/www/site1.ru/public_html sudo chown -R $USER:$USER /var/www/site2.ru/public_html sudo chmod -R 755 /var/www
- Создайте тестовые index.html для каждого сайта:
echo "<h1>Site1 работает!</h1>" > /var/www/site1.ru/public_html/index.html echo "<h1>Site2 работает!</h1>" > /var/www/site2.ru/public_html/index.html
- Создайте конфиги виртуальных хостов:
sudo nano /etc/apache2/sites-available/site1.ru.conf
Пример содержимого:
<VirtualHost *:80> ServerAdmin admin@site1.ru ServerName site1.ru ServerAlias www.site1.ru DocumentRoot /var/www/site1.ru/public_html ErrorLog ${APACHE_LOG_DIR}/site1_error.log CustomLog ${APACHE_LOG_DIR}/site1_access.log combined </VirtualHost>
Аналогично для
site2.ru.conf
. - Активируйте сайты и перезапустите Apache:
sudo a2ensite site1.ru.conf sudo a2ensite site2.ru.conf sudo systemctl reload apache2
- Отключите дефолтный сайт (опционально):
sudo a2dissite 000-default.conf sudo systemctl reload apache2
- Пропишите домены в
/etc/hosts
(для теста на локалке):127.0.0.1 site1.ru 127.0.0.1 site2.ru
Примеры, схемы, кейсы
Кейс | Плюсы | Минусы | Рекомендации |
---|---|---|---|
Несколько сайтов на одном сервере | Экономия ресурсов, простая админка | Одна точка отказа, возможны конфликты | Разделяйте права, используйте разные DocumentRoot |
Тестовый и боевой сайт на одном сервере | Удобно для разработки | Риск случайно перепутать окружения | Явно указывайте domains: dev.site.ru и site.ru |
Автоматизация и массовое создание хостов | Быстро, удобно для хостинга | Ошибки в шаблонах могут аукнуться | Проверяйте конфиги через apache2ctl configtest |
Команды, скрипты, автоматизация
Для массового создания сайтов можно заскриптовать процесс:
#!/bin/bash
site=$1
sudo mkdir -p /var/www/$site/public_html
sudo chown -R $USER:$USER /var/www/$site/public_html
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/$site.conf
sudo sed -i "s|/var/www/html|/var/www/$site/public_html|g" /etc/apache2/sites-available/$site.conf
sudo sed -i "s|ServerAdmin.*|ServerAdmin admin@$site|g" /etc/apache2/sites-available/$site.conf
sudo sed -i "s|ServerName.*|ServerName $site|g" /etc/apache2/sites-available/$site.conf
sudo a2ensite $site.conf
sudo systemctl reload apache2
Сохраняете как addvhost.sh
, запускаете: bash addvhost.sh mynewsite.ru
Похожие решения и альтернативы
- Nginx — тоже поддерживает виртуальные хосты (server blocks), но синтаксис другой.
- Caddy — автоматом ставит SSL, конфиг проще, но меньше гибкости.
- Lighttpd — лёгкий, но специфичный.
- Docker + Apache/Nginx — для каждого сайта отдельный контейнер, удобно для изоляции.
Всё это можно автоматизировать через Ansible, bash-скрипты, или даже через apachectl.
Статистика и сравнение
Веб-сервер | Производительность | Гибкость | Автоматизация | SSL |
---|---|---|---|---|
Apache | Средняя | Максимальная | Высокая (через скрипты) | Ручная/Let’s Encrypt |
Nginx | Высокая | Средняя | Высокая | Ручная/Let’s Encrypt |
Caddy | Высокая | Средняя | Автоматическая | Авто-SSL |
Интересные факты и лайфхаки
- Можно делать wildcard-конфиги: один шаблон для всех поддоменов через
ServerAlias *.site.ru
. - Apache поддерживает модули макросов — удобно для шаблонов.
- Совмещайте с Let’s Encrypt для автоматического SSL (certbot).
- Через mod_proxy можно проксировать трафик на backend (например, Node.js или Python-аппы).
- Для массового управления — используйте конфиги в git и деплойте через ansible/rsync.
Новые возможности и автоматизация
Используя виртуальные хосты, можно:
- Быстро поднимать staging/prod/dev окружения.
- Изолировать сайты друг от друга (разные php-fpm пулы, разные права).
- Автоматизировать деплой новых проектов (скрипты, ansible, CI/CD).
- Динамически генерировать конфиги через шаблоны (например, jinja2).
Вывод и рекомендации
Виртуальные хосты Apache — это must-have для любого, кто хочет держать несколько сайтов на одном сервере. Это гибко, удобно, и легко автоматизируется. Для старта хватит пары команд, а дальше можно крутить как угодно: от ручной настройки до полного DevOps-робота. Если нужен VPS — сюда, если выделенный сервер — сюда. Не забывайте про бэкапы и тестируйте конфиги перед запуском в прод!
Официальная дока Apache: https://httpd.apache.org/docs/2.4/vhosts/
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.