Гид по технологиям

Как настроить базовую конфигурацию Apache для виртуальных хостов на CentOS 6

• 8 min read • Linux • Обновлено 28 Nov 2025
Apache: базовая настройка виртуальных хостов на CentOS 6
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).


Предварительные проверки

  1. У вас должны быть root-права или sudo-доступ.
  2. Apache установлен и запущен. Если Apache не установлен, выполните:
yum install httpd
  1. Проверьте версию Apache (чтобы понимать поведение директив):
httpd -v
  1. Убедитесь, что порт, который вы планируете использовать (80 по умолчанию или нестандартный, например 90), открыт в брандмауэре.

  2. Учтите 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 — проверка работы виртуального хоста

Откройте браузер и перейдите по адресу:

http://12.36.59.890:90

или, если вы используете домен и стандартный порт:

http://www.sample.com

Если всё настроено верно, появится тестовая страница index.html.


Отладка и типичные проблемы

Ниже перечислены распространённые проблемы и способы их устранения.

  1. Apache не запускается после изменения конфигурации
  • Выполните тест конфигурации:
apachectl -t
  • Исправьте синтаксические ошибки в конфигурации.
  1. Пустая страница или 403 Forbidden
  • Проверьте права на каталоги и файлы (chown/chmod как выше).
  • Проверьте SELinux-контекст (см. раздел по безопасности).
  1. 404 Not Found
  • Убедитесь, что DocumentRoot указывает на правильный каталог и что в нём есть index.html.
  • Проверьте путь в VirtualHost и нет ли опечаток в ServerName.
  1. Сервер отвечает, но не по ожидаемому домену
  • Убедитесь, что DNS указывает на ваш сервер или hosts файл настроен локально.
  • Проверьте ServerName и ServerAlias в конфигурации.
  1. Логи ошибок
  • Просмотрите ErrorLog и CustomLog, указанные в конфигурации виртуального хоста:
tail -n 200 /var/www/sample.com/error.log
  1. 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.

  1. Брандмауэр блокирует порт
  • Проверьте 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)

  1. Резервная копия конфигурации httpd.conf.
  2. Создать каталог сайта и назначить права.
  3. Создать конфигурацию VirtualHost в отдельном файле /etc/httpd/conf.d/sample.com.conf.
  4. Проверить конфигурацию apachectl -t.
  5. Перезапустить httpd и проверить доступность.
  6. Мониторить логи в первые 24 часа.

Краткий глоссарий (1 строка на термин)

  • DocumentRoot — каталог, откуда Apache отдаёт файлы сайта.
  • ServerName — основной домен виртуального хоста.
  • ServerAlias — дополнительные имена для того же хоста.
  • NameVirtualHost — директива Apache 2.2, привязывающая именованные виртуальные хосты к порту.
  • SELinux — подсистема безопасности Linux, контролирующая доступ процессов к файлам.

Пример быстрого сценария тестирования (test cases)

  1. Выполнить curl с Host-заголовком и убедиться в HTTP 200.
  2. Открыть страницу в браузере по домену/по IP и убедиться в отображении index.html.
  3. Убедиться, что логи requests.log и error.log заполнены и не содержат критических ошибок.
  4. Проверить, что apachectl -t возвращает Syntax OK.

Заключение

Вы настроили базовую конфигурацию виртуального хоста в Apache на CentOS 6: создали DocumentRoot, назначили права, добавили тестовую страницу, включили VirtualHost в конфигурации и перезапустили Apache. Включены проверочные шаги, рекомендации по SELinux и отладке, а также чеклисты для ролей. Для production-систем рассмотрите перенос конфигураций в /etc/httpd/conf.d, добавление HTTPS и автоматизацию управления конфигурациями.

Важно: планируйте обновление ОС и Apache на поддерживаемую версию, если сервер доступен публично.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро