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

Настройка Name-Based Virtual Host в Apache на FreeBSD

• 6 min read • Серверы • Обновлено 23 Nov 2025
Name-based vhost в Apache на FreeBSD — пошагово
Name-based vhost в Apache на FreeBSD — пошагово

О чём эта статья

Виртуальный хост (Virtual Host) позволяет размещать несколько сайтов (например, site1.co, site2.co, site3.co) на одном сервере. В Apache доступны два основных типа виртуальных хостов: name-based (несколько доменов на одном IP) и IP-based (каждому сайту — свой IP). В этой инструкции мы настроим name-based виртуальные хосты на FAMP (FreeBSD 12.0, Apache, MySQL/MariaDB, PHP) и включим HTTPS с SSL.

Важно: предполагается, что FAMP уже установлен. Если нет — сначала установите стек. Ссылки в конце статьи ведут на официальную документацию.

Основные задачи

  • Инициализировать каталог для конфигураций виртуальных хостов
  • Создать базовый виртуальный хост для HTTP
  • Создать виртуальный хост с поддержкой SSL (HTTPS)

Определения (одно предложение)

  • Virtual Host: конфигурация веб-сервера, которая обслуживает конкретный домен и корневую директорию сайта.

Шаг 1 — Инициализация каталога виртуальных хостов Apache

Сначала определим каталог, где будут храниться все конфигурации виртуальных хостов.

Перейдите в директорию конфигурации Apache ‘/usr/local/etc/apache24’ и создайте каталог ‘vhost’.

cd /usr/local/etc/apache24  
mkdir -p vhost

После этого откройте файл конфигурации ‘httpd.conf’ для редактирования (например, в vim):

vim httpd.conf

Вставьте в конец файла строку:

Include etc/apache24/vhost/*.conf

Сохраните и закройте редактор.

Пустая папка vhost готова для конфигураций Apache

Теперь все файлы с расширением ‘.conf’ внутри каталога ‘vhost’ будут автоматически загружаться Apache.

Шаг 2 — Создание базового виртуального хоста Apache (HTTP)

В этом шаге создадим пример базового виртуального хоста для домена vhost1.hakase-labs.io. Документ-рут будет /usr/local/www/vhost1, и лог-файлы будут раздельными для доступа и ошибок.

Создайте директорию для сайта и файл index.html:

mkdir -p /usr/local/www/vhost1  
cd /usr/local/www/vhost1
vim index.html

Вставьте простой HTML:

VHOST1.HAKASE-LABS.IO

Сохраните и закройте.

Создание index.html для первого виртуального хоста

Затем создайте конфигурационный файл виртуального хоста в каталоге vhost:

cd /usr/local/etc/apache24/vhost/  
vim vhost1.hakase-labs.conf

Вставьте следующее содержимое (не меняйте пути, если следуете инструкции):

  
    ServerAdmin [email protected]  

    ServerName vhost1.hakase-labs.io  
    ServerAlias www.vhost1.hakase-labs.io  
    
    DocumentRoot "/usr/local/www/vhost1"  

    ErrorLog "/var/log/vhost1.hakase-labs.io-error_log"  
    CustomLog "/var/log/vhost1.hakase-labs.io-access_log" common  

      
        Order allow,deny  
        Allow from all  
        Require all granted  
      

Сохраните и выйдете.

Проверьте конфигурацию и перезапустите Apache:

apachectl configtest  
service apache24 restart

Если всё в порядке, Apache загрузит новый виртуальный хост.

Результат проверки и перезапуска Apache

Откройте в браузере http://vhost1.hakase-labs.io — вы увидите ранее созданный index.html:

Страница index.html первого виртуального хоста

Результат: базовый виртуальный хост создан и доступен по HTTP.

Шаг 3 — Создание виртуального хоста Apache с включённым SSL (HTTPS)

Задача — настроить второй виртуальный хост, перенаправление с HTTP на HTTPS, включить SSL и задать безопасные параметры шифров.

  1. Включите модули mod_ssl и mod_rewrite в httpd.conf:
cd /usr/local/etc/apache24/  
vim httpd.conf

Раскомментируйте (или добавьте) следующие строки:

LoadModule ssl_module libexec/apache24/mod_ssl.so  
LoadModule rewrite_module libexec/apache24/mod_rewrite.so

Сохраните и закройте.

  1. Создайте конфигурацию SSL (например, в Includes/ssl.conf):
vim Includes/ssl.conf

Вставьте рекомендованные настройки шифров и протоколов:

Listen 443  
  
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH  
SSLProxyCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH  
  
SSLHonorCipherOrder on   
SSLCompression off  
  
SSLProtocol ALL -SSLv2 -SSLv3  
SSLProxyProtocol ALL -SSLv2 -SSLv3  
SSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1

Сохраните файл.

Добавление SSL конфигурации в Includes

  1. Создайте директорию и индекс для второго сайта:
mkdir -p /usr/local/www/vhost2  
cd /usr/local/www/vhost2
vim index.html

Вставьте:

VHOST2.HAKASE-LABS.IO

Сохраните и закройте.

index.html для vhost2

  1. Создайте конфиг виртуального хоста с перенаправлением на HTTPS и секцией для 443 порта:
cd /usr/local/etc/apache24/vhost/  
vim vhost2.hakase-labs.conf

Вставьте и укажите ваши пути к сертификатам (SSLCertificateFile / SSLCertificateKeyFile):

# Automatic Redirect  
  
ServerName vhost2.hakase-labs.io  
DocumentRoot "/usr/local/www/vhost2"  
Redirect permanent / https://vhost2.hakase-labs.io  
     
  
# HTTPS Config  
  
    SSLEngine On  
    SSLCertificateFile /usr/local/etc/ssl/fullchain.pem  
    SSLCertificateKeyFile /usr/local/etc/ssl/privkey.pem  
  
    ServerAdmin [email protected]  
    DocumentRoot "/usr/local/www/vhost2"  
  
    ServerName vhost2.hakase-labs.io  
    ServerAlias www.vhost2.hakase-labs.io  
    
    ErrorLog "/var/log/vhost2.hakase-labs.io-error_log"  
    CustomLog "/var/log/vhost2.hakase-labs.io-access_log" common  
  
      
        Order allow,deny  
        Allow from all  
        Require all granted  
      

Сохраните и закройте.

Проверьте конфигурацию и перезапустите Apache:

apachectl configtest  
service apache24 restart

Если ошибок нет, виртуальный хост с SSL будет загружен.

Перезапуск Apache и подтверждение загрузки vhost с SSL

Откройте http://vhost2.hakase-labs.io — вы будете автоматически переадресованы на https://vhost2.hakase-labs.io и увидите страницу index.html:

Страница vhost2 открывается по HTTPS после редиректа

Поздравляю — конфигурация name-based виртуального хоста с SSL завершена.


Критерии приёмки

  • Apache успешно проходит apachectl configtest без ошибок.
  • HTTP-запросы к vhost перенаправляются на HTTPS там, где настроен редирект.
  • SSL-сертификаты доступны по указанным путям и корректно обслуживаются.
  • Лог-файлы записываются в указанные файлы ошибок и доступа.

Чеклист перед развёртыванием (короткий)

  • Создан каталог /usr/local/etc/apache24/vhost и подключён в httpd.conf
  • Для каждого сайта есть своя DocumentRoot с index.html (или приложение)
  • Для HTTPS: модули mod_ssl и mod_rewrite загружены
  • SSL-сертификаты и приватные ключи доступны и имеют правильные права доступа
  • Apache конфигурация проверена и сервер перезапущен

Важно: храните приватные ключи с правами 600 и владельцем root.

Рольные чеклисты

  • Системный администратор: проверка прав файлов, резервное копирование конфигураций, SELinux/AppArmor (если применимо).
  • Веб-разработчик: проверьте, что DocumentRoot содержит необходимые файлы и что относительные пути работают.
  • DevOps/CI: включите тесты доступности и SSL-сканирование в конвейер развертывания.

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

  • Ошибка при запуске Apache: запустите apachectl -t для детальной проверки конфигурации.
  • 403 Forbidden: проверьте права на DocumentRoot и директивы (Require all granted).
  • SSL не читается: проверьте пути SSLCertificateFile и SSLCertificateKeyFile, права и формат PEM.
  • Браузер предупреждает о недоверенном сертификате: используйте сертификат от доверенного CA или добавьте исключение для тестовой среды.

Безопасность и рекомендации по SSL

  • Используйте сертификаты от доверенных центров (Let’s Encrypt, коммерческие CA) для публичных сайтов.
  • В production-окружении отключите слабые протоколы и шифры, тестируйте конфигурацию с помощью SSL Labs.
  • Обновляйте OpenSSL и Apache регулярно.
  • Настройте HSTS (если уверены, что HTTPS будет всегда доступен): добавьте в виртуальный хост заголовок Strict-Transport-Security.

Пример HSTS (вставьте в секцию для HTTPS):

Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

Альтернативные подходы

  • IP-based virtual hosts: полезно, если вы хотите отдельный IP для каждого домена (например, для разных сертификатов старых типов).
  • Проксирование через nginx: поставить nginx как обратный прокси, управлять SSL на nginx, а Apache оставить для рендеринга.
  • Контейнеризация: запуск каждого сайта в отдельном контейнере (Docker) с прокси на входе (nginx, Traefik).

Когда name-based vhost не подойдёт (контрпримеры)

  • Нужен отдельный выделенный IP для каждого сертификата/сервиса (редко — только для устаревших кейсов).
  • Сценарии с разными TCP-портами/функциональностью, требующие уникального IP и маршрутизации на сетевом уровне.

Мини-методология для внедрения в прод

  1. Подготовка: резервная копия /usr/local/etc/apache24
  2. Локальная проверка: настройка и тестирование на staging-сервере
  3. Выпуск: поэтапное включение vhost’ов, контроль логов
  4. Мониторинг: проверка метрик доступности и логов ошибок

Тестовые случаи / приёмочные тесты

  • Доступ к http://vhost1.hakase-labs.io возвращает HTTP 200
  • Доступ к http://vhost2.hakase-labs.io выполняет 301/302 редирект на https://vhost2.hakase-labs.io
  • HTTPS на vhost2 отвечает 200 и сертификат валиден для домена
  • Попытка чтения приватного ключа обычным пользователем завершается ошибкой (проверить права)

Совместимость и миграция

  • Конфигурационные директивы в примерах ориентированы на Apache 2.4 (в FreeBSD 12.0 используется apache24).
  • При миграции с Apache 2.2 обратите внимание на различия в директивах (Order/Allow/Require).

Краткое резюме

  • Name-based виртуальные хосты позволяют размещать несколько доменов на одном IP.
  • Шаги: создать каталог vhost, подключить Include в httpd.conf, создать DocumentRoot и конфиг vhost, проверить и перезапустить Apache.
  • Для HTTPS: включить mod_ssl, создать ssl.conf с безопасными настройками, указать пути к сертификатам и ключам.

Ссылки и справочные материалы

https://www.freebsd.org/doc/

https://httpd.apache.org/docs/2.4/vhosts/


Краткое содержание в 1–2 предложениях: по этой инструкции вы можете быстро добавить name-based виртуальные хосты в Apache на FreeBSD, обеспечить перенаправление на HTTPS и проверить конфигурацию. Следуйте чеклисту и разделам отладки, чтобы избежать типичных ошибок.

Поделиться: 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 быстро