При размещении сайта на сервере с 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.phpindex.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 или другой движок — данный шаблон можно считать базовым и правильным.