Правильная настройка VirtualHost в Apache: разбор на примере

При размещении сайта на сервере с Apache одной из ключевых задач является корректная настройка VirtualHost. Именно VirtualHost определяет, какой сайт, из какой папки и с какими параметрами будет обслуживаться веб-сервером.

В этой статье разберём правильный и безопасный пример VirtualHost, а также подробно объясним каждую строку конфигурации.


Пример корректного VirtualHost

<VirtualHost *:80>
    ServerName example.ru
    ServerAlias www.example.ru
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/html/example.ru/public_html

    <Directory /var/www/html/example.ru/public_html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog /var/www/html/example.ru/logs/error.log
    CustomLog /var/www/html/example.ru/logs/access.log combined
</VirtualHost>

Разбор конфигурации по шагам

<VirtualHost *:80>

Указывает, что сайт будет работать:

  • на 80 порту
  • по HTTP
  • для всех IP-адресов сервера (*)

Если используется HTTPS, то обычно добавляется отдельный VirtualHost на порт 443.


ServerName example.ru

Основное доменное имя сайта.
Apache использует его, чтобы понять, какой конфиг применять при запросе.

Важно:
ServerName должен совпадать с доменом, который указывает на сервер.


ServerAlias www.example.ru

Дополнительные доменные имена, которые также будут вести на этот сайт.

Обычно сюда добавляют:

  • www.example.ru
  • поддомены (если нужно)

ServerAdmin webmaster@localhost

Контактный email администратора сайта.
Используется в сообщениях об ошибках сервера.


DocumentRoot /var/www/html/example.ru/public_html

Папка, в которой находятся файлы сайта:

  • index.php
  • index.html
  • WordPress, Laravel и т.д.

Рекомендация:
Хранить каждый сайт в отдельной директории — это безопаснее и удобнее в обслуживании.


Блок <Directory>

<Directory /var/www/html/example.ru/public_html>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Этот блок задаёт права и правила доступа к каталогу сайта.

Options Indexes FollowSymLinks

  • Indexes — разрешает показ списка файлов, если нет index-файла
    Для продакшена лучше отключать
  • FollowSymLinks — разрешает использовать символические ссылки

AllowOverride All

Разрешает использовать файл .htaccess.

Необходимо для:

  • WordPress
  • ЧПУ (permalinks)
  • редиректов
  • кеширования
  • защиты папок

Без этой строки многие CMS работают некорректно.


Require all granted

Разрешает доступ ко всем файлам сайта для пользователей.

Это стандартная и обязательная директива для Apache 2.4+.


Логи сайта

ErrorLog /var/www/html/example.ru/logs/error.log
CustomLog /var/www/html/example.ru/logs/access.log combined

ErrorLog

Файл, в который записываются:

  • ошибки PHP
  • ошибки Apache
  • проблемы с правами доступа

CustomLog

Лог всех запросов к сайту:

  • IP
  • URL
  • код ответа сервера

Совет:
Отдельные логи для каждого сайта сильно упрощают диагностику ошибок.


Частые ошибки при настройке VirtualHost

  • Неверный DocumentRoot
  • Нет AllowOverride All — не работают ЧПУ
  • Ошибки в правах на папки
  • Отсутствует ServerAlias для www
  • Все сайты пишут логи в один файл

Итог

Правильно настроенный VirtualHost:

  • обеспечивает стабильную работу сайта
  • позволяет использовать .htaccess
  • упрощает поддержку и отладку
  • повышает безопасность сервера

Если вы используете WordPress или другой движок — данный шаблон можно считать базовым и правильным.