Home » Настройка виртуальных хостов Apache на Ubuntu 24
Настройка виртуальных хостов Apache на Ubuntu 24

Настройка виртуальных хостов Apache на Ubuntu 24

В этой статье разберёмся, что такое виртуальные хосты Apache, зачем они нужны и как их быстро поднять на свежей Ubuntu 24. Если вы хотите раздавать несколько сайтов с одного сервера или просто навести порядок в конфиге, без виртуальных хостов не обойтись. Расскажу, как всё работает, как не наломать дров с DocumentRoot и SSL, покажу реальные примеры, дам советы и поделюсь лайфхаками по автоматизации. Поехали!

Как это работает?

  • Виртуальные хосты (Virtual Hosts) — это способ Apache обслуживать несколько сайтов (доменов) на одном сервере. Каждый сайт — отдельная конфигурация, своя папка, свои логи.
  • Работает через директиву <VirtualHost> в конфиге. Apache смотрит, к какому домену пришёл запрос, и подсовывает нужные настройки.
  • Есть два типа: name-based (по имени домена, 99% случаев) и IP-based (редко, когда у вас несколько IP-шников).

Пошаговая настройка на Ubuntu 24

Всё просто, если не бояться терминала:

  1. Установите Apache (если ещё нет):
    sudo apt update
    sudo apt install apache2
  2. Проверьте статус:
    systemctl status apache2
  3. Создайте директории для сайтов:
    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
  4. Создайте тестовые 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
  5. Создайте конфиги виртуальных хостов:
    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.

  6. Активируйте сайты и перезапустите Apache:
    sudo a2ensite site1.ru.conf
    sudo a2ensite site2.ru.conf
    sudo systemctl reload apache2
  7. Отключите дефолтный сайт (опционально):
    sudo a2dissite 000-default.conf
    sudo systemctl reload apache2
  8. Пропишите домены в /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/


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

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

Leave a reply

Your email address will not be published. Required fields are marked