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

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

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

APACHE_VHOST_MISCONFIG Linux / DevOps

Развертывание Virtual Hosts в Apache: Name-Based против IP-Based

Обновлено: 21.08.2026
  • Все домены открывают один и тот же сайт (первый сконфигурированный VirtualHost по алфавиту).
  • Команда apachectl -S выводит предупреждения о перекрывающихся портах (VirtualHost overlap on port 80).
  • Необходимость привязки изолированных SSL-сертификатов к разным сетевым интерфейсам сервера.

1. Концепция: Name-Based vs IP-Based

  • Name-Based: Десятки сайтов делят один IP-адрес и порт. Apache определяет нужный сайт по заголовку запроса Host: (стандарт для 99% сайтов).
  • IP-Based: Каждый сайт слушает собственный уникальный физический или виртуальный IP-адрес.

2. Настройка Name-Based Virtual Hosts

Создайте файл /etc/apache2/sites-available/site1.conf:

<VirtualHost *:80>
    ServerAdmin admin@site1.ru
    ServerName site1.ru
    ServerAlias www.site1.ru

    DocumentRoot /var/www/site1/public_html
    DirectoryIndex index.php index.html

    <Directory /var/www/site1/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/site1_error.log
    CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
</VirtualHost>

3. Настройка IP-Based Virtual Host

При наличии нескольких IP на сетевом интерфейсе (192.168.1.10 и 192.168.1.11):

<VirtualHost 192.168.1.10:80>
    ServerName portal.corp.local
    DocumentRoot /var/www/portal
</VirtualHost>

<VirtualHost 192.168.1.11:80>
    ServerName public.corp.local
    DocumentRoot /var/www/public
</VirtualHost>

4. Активация и траблшутинг через apachectl -S

# Включение сайтов (Debian/Ubuntu)
a2ensite site1.conf site2.conf

# Проверка карты загруженных виртуальных хостов
apachectl -S

# Применение
systemctl reload apache2
💡 Практика специалистов: Всегда держите отдельный хост 000-default.conf с заглушкой (или возвратом HTTP 444/403), чтобы запросы со случайными Host-заголовками от ботов и сканеров не попадали в рабочие бизнес-приложения.

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

Почему открывается не тот сайт при обращении по IP?

Если входящий Host-заголовок не совпадает ни с одним ServerName или ServerAlias, Apache отдает первый загруженный виртуальный хост (по алфавиту файлов конфигурации, обычно 000-default.conf).

Нужна ли директива NameVirtualHost в Apache 2.4?

Нет, в Apache 2.4 директива NameVirtualHost устарела и была удалена. Любой блок <VirtualHost IP:Port> автоматически работает как Name-Based.

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