Настройка Name-Based Virtual Host в 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Сохраните и закройте редактор.

Теперь все файлы с расширением ‘.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/vhost1vim index.htmlВставьте простой HTML:
VHOST1.HAKASE-LABS.IO
Сохраните и закройте.

Затем создайте конфигурационный файл виртуального хоста в каталоге 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 загрузит новый виртуальный хост.

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

Результат: базовый виртуальный хост создан и доступен по HTTP.
Шаг 3 — Создание виртуального хоста Apache с включённым SSL (HTTPS)
Задача — настроить второй виртуальный хост, перенаправление с HTTP на HTTPS, включить SSL и задать безопасные параметры шифров.
- Включите модули 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Сохраните и закройте.
- Создайте конфигурацию 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Сохраните файл.

- Создайте директорию и индекс для второго сайта:
mkdir -p /usr/local/www/vhost2
cd /usr/local/www/vhost2vim index.htmlВставьте:
VHOST2.HAKASE-LABS.IO
Сохраните и закройте.

- Создайте конфиг виртуального хоста с перенаправлением на 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 будет загружен.

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

Поздравляю — конфигурация 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 и маршрутизации на сетевом уровне.
Мини-методология для внедрения в прод
- Подготовка: резервная копия /usr/local/etc/apache24
- Локальная проверка: настройка и тестирование на staging-сервере
- Выпуск: поэтапное включение vhost’ов, контроль логов
- Мониторинг: проверка метрик доступности и логов ошибок
Тестовые случаи / приёмочные тесты
- Доступ к 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://httpd.apache.org/docs/2.4/vhosts/
Краткое содержание в 1–2 предложениях: по этой инструкции вы можете быстро добавить name-based виртуальные хосты в Apache на FreeBSD, обеспечить перенаправление на HTTPS и проверить конфигурацию. Следуйте чеклисту и разделам отладки, чтобы избежать типичных ошибок.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента