Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

Linux / DevOps

Виртуальные хосты в Apache (Virtual Hosts): 2 сайта на одном сервере

Обновлено: 27.08.2026 · Официальная документация ↗

Как запустить несколько доменов на одном Apache сервере?

Веб-сервер Apache позволяет размещать десятки различных сайтов на одном сервере и общем IP-адресе благодаря механизму Virtual Hosts (Виртуальные хосты). Когда пользователь вводит в браузере адрес site1.ru или site2.ru, Apache анализирует HTTP-заголовок Host: и открывает файлы из строго соответствующей изолированной директории.

Структура размещения файлов сайтов:

/var/www/
├── site1.ru/
│   └── public_html/index.html
└── site2.ru/
    └── public_html/index.html

Пошаговое создание двух виртуальных хостов в Apache

  1. Шаг 1. Создаем структуру директорий для сайтов

    sudo mkdir -p /var/www/site1.ru/public_html
    sudo mkdir -p /var/www/site2.ru/public_html
  2. Шаг 2. Выдаем правильные права доступа веб-серверу

    Владельцем файлов сайта должен быть системный пользователь веб-сервера (www-data):

    sudo chown -R www-data:www-data /var/www/site1.ru
    sudo chown -R www-data:www-data /var/www/site2.ru
    sudo chmod -R 755 /var/www
  3. Шаг 3. Создаем тестовые страницы index.html

    echo "<h1>Добро пожаловать на Site 1!</h1>" | sudo tee /var/www/site1.ru/public_html/index.html
    echo "<h1>Добро пожаловать на Site 2!</h1>" | sudo tee /var/www/site2.ru/public_html/index.html
  4. Шаг 4. Создаем конфигурационные файлы хостов

    Создайте конфиг для первого сайта:

    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 с путями к папке site2.ru).

  5. Шаг 5. Активируем сайты и перезапускаем Apache

    # Включаем созданные виртуальные хосты утилитой a2ensite:
    sudo a2ensite site1.ru.conf
    sudo a2ensite site2.ru.conf
    
    # Проверяем синтаксис:
    sudo apache2ctl configtest
    
    # Применяем настройки:
    sudo systemctl restart apache2
💡 Практика специалистов: Всегда разделяйте файлы логов ErrorLog и CustomLog для каждого виртуального хоста в отдельные файлы, как показано в примере. Если все сайты будут писать ошибки в один общий error.log, отладка упавшего сайта на production-сервере превратится в кошмар.

Частые вопросы (FAQ)

Что делает директива ServerAlias?

Директива ServerAlias позволяет сайту открываться по альтернативным именам, например, с приставкой www (www.site1.ru).

Что делать, если при открытии сайта выдается Forbidden 403?

Проверьте права доступа к папке DocumentRoot. Пользователь www-data должен иметь права на чтение и исполнение (chmod 755).

Как отключить дефолтный сайт-заглушку Apache?

Выполните команду отключения стандартного хоста: sudo a2dissite 000-default.conf && sudo systemctl reload apache2.

Как включить поддержку файлов переопределения .htaccess?

Внутри блока VirtualHost добавьте директиву: <Directory /var/www/site1.ru/public_html> AllowOverride All </Directory> и включите модуль rewrite: sudo a2enmod rewrite.

Полезные материалы
Рекомендуем