Как настроить базовую конфигурацию Apache для виртуальных хостов на CentOS 6
О чём эта инструкция
Кратко: показано, как запустить несколько сайтов (виртуальных хостов) на одном сервере с одной IP-адресацией. Подойдёт для VPS и тестовых окружений. Описанные команды и примеры рассчитаны на CentOS 6 с Apache (httpd), где чаще используется Apache 2.2 и конфигурация на основе httpd.conf.
Кому это полезно
- Системным администраторам, которые впервые настраивают virtual hosts на CentOS 6
- Разработчикам, тестирующим сайты на одной машине
- Инженерам, которым нужно быстро проверить работу домена на нестандартном порту
Содержание
- Введение в виртуальные хосты
- Необходимые проверки перед началом
- Пошаговая настройка (создание каталога, права, страница, включение, перезапуск, локальный hosts)
- Отладка и типичные ошибки
- Рекомендации по безопасности (SELinux, firewall)
- Критерии приёмки и тесты
- Резервный план и откат
- Чеклисты для ролей
- Справочник команд и термины
Введение в виртуальные хосты
Виртуальные хосты (virtual hosts) позволяют запускать несколько доменов на одном IP-адресе и одном инстансе Apache. Каждый сайт получает свою DocumentRoot и отдельную конфигурацию ServerName/ServerAlias. В Apache 2.2 (типично для CentOS 6) используется директива NameVirtualHost для привязки виртуальных хостов к порту.
Краткое определение: Virtual host — контейнер конфигурации в Apache, который связывает домен (ServerName) и каталог файлов сайта (DocumentRoot).
Предварительные проверки
- У вас должны быть root-права или sudo-доступ.
- Apache установлен и запущен. Если Apache не установлен, выполните:
yum install httpd- Проверьте версию Apache (чтобы понимать поведение директив):
httpd -vУбедитесь, что порт, который вы планируете использовать (80 по умолчанию или нестандартный, например 90), открыт в брандмауэре.
Учтите SELinux: на CentOS он часто включён, и потребуется правильный контекст для DocumentRoot.
Пошаговая настройка Apache Virtual Hosts на CentOS
Ниже приведён развернутый процесс с пояснениями.
Шаг 1 — создание каталога сайта
Создайте корневой каталог документа (DocumentRoot) для домена. Пример:
mkdir -p /var/www/sample.com/public_htmlЭтот путь станет значением DocumentRoot в конфигурации виртуального хоста.
Важно: используйте реальный зарегистрированный домен для публичного сервера. Для локального тестирования можно воспользоваться локальным файлом hosts (см. шаг 6).
Шаг 2 — права и владельцы
Назначьте владельца каталога веб-серверу и откройте читаемые права:
chown -R www:www /var/www/sample.com/public_html
chmod 755 /var/wwwПояснение: www — типичный системный пользователь/группа для httpd в CentOS 6; проверьте свои значения в /etc/httpd/conf/httpd.conf (директива User/Group).
Шаг 3 — создание тестовой страницы
Создайте index.html в DocumentRoot, чтобы убедиться, что виртуальный хост отрабатывает:
vi /var/www/sample.com/public_html/index.htmlВставьте содержимое:
www.sample.com
Congrats: You Have Successfully Set Up a Virtual Host
Сохраните и закройте редактор.
Шаг 4 — включение виртуальных хостов в конфигурации Apache
Откройте основной конфигурационный файл httpd:
sudo vi /etc/httpd/conf/httpd.confНайдите блок конфигурации, где задаются слушающие порты и секция Virtual Hosts. В примере используется порт 90:
#Listen 21.46.65.77:90
Listen 90Опуститесь вниз до секции Virtual Hosts и добавьте/раскомментируйте блок. Пример:
NameVirtualHost *:90
#
# NOTE: NameVirtualHost cannot be used without a port specifier
# (e.g. :90) if mod_ssl is being used, due to the nature of the
# SSL protocol.
#
#
# VirtualHost sample:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
ServerAdmin [email protected]
DocumentRoot /var/www/sample.com/public_html
ServerName www.sample.com
ServerAlias sample.com
ErrorLog /var/www/sample.com/error.log
CustomLog /var/www/sample.com/requests.log
Пояснения и рекомендации:
- Раскомментируйте NameVirtualHost *:90 (уберите #). В Apache 2.2 эта директива необходима для привязки именованных виртуальных хостов к порту.
- Если вы используете стандартный HTTP-порт 80, замените :90 на :80 везде.
- DocumentRoot должен точно совпадать с каталогом, созданным на шаге 1.
- ServerName указывает основной домен; ServerAlias — дополнительные варианты (без www, поддомены и т. п.).
- Проверьте пути логов: создайте каталоги под логи, если нужно, и дайте права на запись.
Примечание: в CentOS принято держать отдельные файлы виртуальных хостов в /etc/httpd/conf.d/ — можно создать файл /etc/httpd/conf.d/sample.com.conf и поместить туда VirtualHost. Это улучшит управляемость.
Пример отдельного файла /etc/httpd/conf.d/sample.com.conf:
ServerAdmin [email protected]
DocumentRoot /var/www/sample.com/public_html
ServerName www.sample.com
ServerAlias sample.com
ErrorLog /var/www/sample.com/error.log
CustomLog /var/www/sample.com/requests.log combined
Если вы создаёте файлы в conf.d, убедитесь, что в /etc/httpd/conf/httpd.conf не дублируется аналогичная конфигурация.
Шаг 5 — перезапуск Apache
После изменения конфигурации нужно перезапустить httpd, чтобы применить изменения:
/etc/init.d/httpd restartВозможное предупреждение:
“Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName” — это предупреждение, а не фатальная ошибка. Чтобы убрать его, укажите глобально ServerName в /etc/httpd/conf/httpd.conf:
ServerName server.example.com:90или на стандартном порту “server.example.com:80”.
Шаг 6 — (опционально) настройка локального файла hosts для тестирования
Если вы не используете публичный домен, можно добавить соответствие домен→IP на локальной машине:
На Linux/Mac (потребуется root):
nano /etc/hostsДобавьте строку (пример):
12.36.59.890 www.example.comНа Windows отредактируйте C:\Windows\System32\drivers\etc\hosts (через блокнот с правами администратора).
После этого в браузере на вашей машине запросы к www.example.com будут направляться на указанный IP.
Важно: удалите тестовые записи из hosts после завершения тестирования, чтобы избежать путаницы.
Шаг 7 — проверка работы виртуального хоста
Откройте браузер и перейдите по адресу:
или, если вы используете домен и стандартный порт:
Если всё настроено верно, появится тестовая страница index.html.
Отладка и типичные проблемы
Ниже перечислены распространённые проблемы и способы их устранения.
- Apache не запускается после изменения конфигурации
- Выполните тест конфигурации:
apachectl -t- Исправьте синтаксические ошибки в конфигурации.
- Пустая страница или 403 Forbidden
- Проверьте права на каталоги и файлы (chown/chmod как выше).
- Проверьте SELinux-контекст (см. раздел по безопасности).
- 404 Not Found
- Убедитесь, что DocumentRoot указывает на правильный каталог и что в нём есть index.html.
- Проверьте путь в VirtualHost и нет ли опечаток в ServerName.
- Сервер отвечает, но не по ожидаемому домену
- Убедитесь, что DNS указывает на ваш сервер или hosts файл настроен локально.
- Проверьте ServerName и ServerAlias в конфигурации.
- Логи ошибок
- Просмотрите ErrorLog и CustomLog, указанные в конфигурации виртуального хоста:
tail -n 200 /var/www/sample.com/error.log- SELinux блокирует доступ (типично для CentOS)
- Проверьте контекст файлов:
ls -Z /var/www/sample.com/public_html- Для статического содержимого корректный контекст — httpd_sys_content_t. Установите его так:
semanage fcontext -a -t httpd_sys_content_t "/var/www/sample.com(/.*)?"
restorecon -Rv /var/www/sample.comЕсли semanage отсутствует, установите пакет policycoreutils-python.
- Брандмауэр блокирует порт
- Проверьте iptables или firewalld, откройте порт 90 или 80 по необходимости.
iptables -L -nПроверки и критерии приёмки
Критерии приёмки (что должно быть проверено перед закрытием задачи):
- Страница по адресу http://www.sample.com возвращает содержимое index.html.
- apachectl -t возвращает “Syntax OK”.
- Логи виртуального хоста создаются и записываются.
- При обращении по IP или имени возвращается корректный DocumentRoot (проверка заголовка ServerName).
- Если используется SELinux — файлы имеют правильный контекст и нет AVC-отказов.
Минимальные тесты (acceptance):
- Открыть страницу в браузере (локально или удалённо).
- Выполнить curl с заголовком Host:
curl -I -H "Host: www.sample.com" http://12.36.59.890:90/Ожидается HTTP 200 и заголовки от Apache.
Резервный план и откат
Перед изменением httpd.conf создайте резервную копию:
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak-$(date +%F)Если после изменения Apache не запускается, восстановите резервную копию и перезапустите:
cp /etc/httpd/conf/httpd.conf.bak-2020-01-01 /etc/httpd/conf/httpd.conf
/etc/init.d/httpd restart(пример команды cp — подставьте вашу дату бэкапа).
Чеклисты по ролям
Администратор (Ops):
- Сделать бэкап /etc/httpd/conf/httpd.conf
- Создать каталоги сайта и задать владельца
- Проверить SELinux-контексты
- Открыть нужные порты в брандмауэре
- Перезапустить Apache и проверить логи
Разработчик/тестировщик:
- Добавить тестовый index.html
- Протестировать доступ через curl и браузер
- Проверить работу через hosts файл для локальной отладки
Альтернативные подходы и рекомендации
- Вместо редактирования основного httpd.conf держите каждую конфигурацию виртуального хоста в /etc/httpd/conf.d/*.conf — так проще управлять несколькими сайтами.
- Для управления большими парками серверов применяйте конфигурационные инструменты (Ansible, Puppet) с шаблонами для VirtualHost.
- Для SSL используйте отдельные VirtualHost на порт 443 и mod_ssl; на CentOS 6 необходимо учитывать особенности SNI и версию OpenSSL.
Безопасность и совместимость
- SELinux: задавайте контексты httpd_sys_content_t для каталогов, к которым должен иметь доступ Apache.
- Файлы логов и временные каталоги должны иметь корректные права и владельцев.
- CentOS 6 устарел и больше не получает обновлений безопасности из официальных репозиториев — рекомендуем план миграции на поддерживаемую версию ОС.
Модель решения: когда этот метод не подходит
- Если вы используете контейнеры (Docker) или более новые дистрибутивы с Apache 2.4 — часть директив (например, NameVirtualHost) может отличаться.
- Для больших production-систем с десятками доменов лучше использовать автоматизированную генерацию конфигураций и сертификатов (Let’s Encrypt + автоматизация).
Справочник команд (cheat sheet)
- Установка Apache:
yum install httpd- Запуск/рестарт:
/etc/init.d/httpd restart- Тест конфигурации:
apachectl -t- Проверка SELinux контекста:
ls -Z /var/www/sample.com/public_html
restorecon -Rv /var/www/sample.com- Проверка отклика виртуального хоста через curl:
curl -I -H "Host: www.sample.com" http://12.36.59.890:90/Небольшая методология развертывания (mini-playbook)
- Резервная копия конфигурации httpd.conf.
- Создать каталог сайта и назначить права.
- Создать конфигурацию VirtualHost в отдельном файле /etc/httpd/conf.d/sample.com.conf.
- Проверить конфигурацию apachectl -t.
- Перезапустить httpd и проверить доступность.
- Мониторить логи в первые 24 часа.
Краткий глоссарий (1 строка на термин)
- DocumentRoot — каталог, откуда Apache отдаёт файлы сайта.
- ServerName — основной домен виртуального хоста.
- ServerAlias — дополнительные имена для того же хоста.
- NameVirtualHost — директива Apache 2.2, привязывающая именованные виртуальные хосты к порту.
- SELinux — подсистема безопасности Linux, контролирующая доступ процессов к файлам.
Пример быстрого сценария тестирования (test cases)
- Выполнить curl с Host-заголовком и убедиться в HTTP 200.
- Открыть страницу в браузере по домену/по IP и убедиться в отображении index.html.
- Убедиться, что логи requests.log и error.log заполнены и не содержат критических ошибок.
- Проверить, что apachectl -t возвращает Syntax OK.
Заключение
Вы настроили базовую конфигурацию виртуального хоста в Apache на CentOS 6: создали DocumentRoot, назначили права, добавили тестовую страницу, включили VirtualHost в конфигурации и перезапустили Apache. Включены проверочные шаги, рекомендации по SELinux и отладке, а также чеклисты для ролей. Для production-систем рассмотрите перенос конфигураций в /etc/httpd/conf.d, добавление HTTPS и автоматизацию управления конфигурациями.
Важно: планируйте обновление ОС и Apache на поддерживаемую версию, если сервер доступен публично.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента