Как настроить виртуальные хосты Apache на CentOS 8
22.12.20202020-12-22T17:35:06+03:002021-01-14T14:19:48+03:00 CentOS, Linux Комментариев нет
Виртуальные хосты Apache позволяют запускать более одного веб-сайта на одной машине. С помощью виртуальных хостов вы можете указать корень документа сайта (каталог, содержащий файлы веб-сайта), создать отдельную политику безопасности для каждого сайта, использовать разные сертификаты SSL и многое другое.
В этой статье объясняется, как настроить виртуальные хосты Apache на сервере CentOS 8.
Содержание
Подготовка
Прежде чем продолжить изучение этого руководства, убедитесь, что вы выполнили следующие требования:
- Доменное имя, указывающее на IP вашего публичного сервера.
- Apache установлен в вашей системе CentOS .
- Вы вошли в систему как root или пользователь с привилегиями sudo .
Создание структуры каталогов
Корневой каталог документа — это каталог, в котором файлы веб-сайта для доменного имени хранятся и обслуживаются в ответ на запросы.
Мы будем использовать следующую структуру каталогов:
/var/www/ ├── example.com │ └── public_html ├── example2.com │ └── public_html ├── example3.com │ └── public_html
Для каждого домена, который будет размещен на сервере, мы создадим отдельный каталог внутри /var/www
. В каталоге домена мы создадим каталог public_html
который будет корневым каталогом документа домена и будет хранить файлы веб-сайта домена.
Начнем с создания корневого каталога для домена example.com
:
sudo mkdir -p /var/www/example.com/public_html
В целях тестирования создайте файл index.html
в корневом каталоге документов домена:
sudo nano /var/www/example.com/public_html/index.html
Скопируйте и вставьте в файл следующий код:
/var/www/example.com/public_html/index.html
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>Welcome to example. com</title> </head> <body> <h2>Success! example.com home page!</h2> </body> </html>
Чтобы избежать проблем с разрешениями, измените владельца корневого каталога документов домена на пользователя apache
:
sudo chown -R apache: /var/www/example.com
Создание файла виртуального хоста
Есть несколько способов настроить виртуальный хост. Вы можете добавить все директивы виртуального хоста в один файл или создать новый файл конфигурации для каждой директивы виртуального хоста. Как правило, вам следует предпочесть второй подход, который более удобен в обслуживании.
По умолчанию Apache настроен на загрузку всех файлов конфигурации, которые заканчиваются на .conf
из каталога /etc/httpd/conf.d/
.
Чтобы создать виртуальный хост для определенного веб-сайта, откройте выбранный вами редактор и создайте следующий базовый файл конфигурации виртуального хоста:
/etc/httpd/conf. d/example.com.conf
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com ServerAdmin [email protected] DocumentRoot /var/www/example.com/public_html <Directory /var/www/example.com/public_html> Options -Indexes +FollowSymLinks AllowOverride All </Directory> ErrorLog /var/log/httpd/example.com-error.log CustomLog /var/log/httpd/example.com-access.log combined </VirtualHost>
ServerName
: имя домена, для которого будет использоваться конфигурация виртуального хоста. Это ваше доменное имя.ServerAlias
: все остальные домены, для которых также будет использоваться конфигурация виртуального хоста, например субдоменwww
.DocumentRoot
: каталог, из которого Apache обслуживает файлы домена.Options
: эта директива управляет функциями сервера каталогов.-Indexes
: предотвращает-Indexes
каталогов.FollowSymLinks
: этот параметр указывает веб-серверу следовать символическим ссылкам.
AllowOverride
.htaccess
могут переопределять директивы конфигурации.ErrorLog
,CustomLog
: расположение файлов журнала.
Отредактируйте файл в соответствии с вашими потребностями и сохраните его.
Имя файла конфигурации должно заканчиваться на .conf
. Вы можете назвать файл конфигурации как хотите. Лучше всего использовать доменное имя в качестве имени файла конфигурации виртуального хоста.
Проверьте синтаксис файла конфигурации с помощью:
sudo apachectl configtest
Если ошибок нет, результат должен выглядеть так:
Syntax OK
Чтобы активировать вновь созданный виртуальный хост, перезапустите службу Apache с помощью:
sudo systemctl restart httpd
Откройте http://example. com
чтобы убедиться, что все работает должным образом.
Выводы
В этом руководстве мы показали вам, как создать конфигурацию виртуального хоста Apache в CentOS 8. Вы можете повторить шаги, описанные выше, и создать дополнительные виртуальные хосты для всех ваших доменов.
Если вы хотите защитить свой веб-сайт с помощью сертификата SSL, вы можете создать и установить бесплатный сертификат Letsencrypt SSL .
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Этот пост является частью серии Install LAMP Stack on CentOS 8. Другие сообщения из этой серии:
- Как установить Apache на CentOS 8
- Как установить MySQL на CentOS 8
- Как установить PHP на CentOS 8
- Защитите Apache с помощью Let’s Encrypt на CentOS 8
Настройка виртуальных хостов Apache на CentOS 8
Содержание
- Установка веб-сервера Apache на CentOS 8 / Rocky Linux 8
- Создание виртуальных хостов Apache на CentOS 8
- Доступ к новому виртуальному хосту
- Заключение
Здравствуйте, друзья. В этой статье мы покажем вам, как настроить виртуальные хосты Apache на CentOS 8 или Rocky Linux 8.
Обычно на одном сервере работает несколько веб-сайтов. Каждый из них нуждается в особой конфигурации, так как потребности каждого из них могут отличаться. Именно поэтому необходимо создавать виртуальные хосты.
Виртуальные хосты позволяют иметь множество веб-сайтов, работающих на одном сервере. Кроме того, это лучший способ их конфигурирования.
Именно это и является целью данной статьи — показать вам, как это сделать и наилучшим образом. Давайте приступим к настройке виртуальных хостов Apache на CentOS 8.
Установка веб-сервера Apache на CentOS 8 / Rocky Linux 8
Давайте начнем с основ. Сначала мы установим веб-сервер Apache.
sudo dnf update
sudo dnf install httpd
После установки Apache его необходимо запустить. Делается это очень просто, командой:
sudo systemctl start httpd
Обычно он запускается вместе с системой.
sudo systemctl status httpd
Не забудьте проверить статус на наличие ошибок Apache.
sudo systemctl status httpd
Скорее всего, у вас работает брандмауэр (firewall). В этом случае для корректной работы требуется открыть порты 80 и 443.
sudo firewall-cmd --add-port=80/tcp
sudo firewall-cmd --add-port=443/tcp
Перезапустите брандмауэр (firewall), для того чтобы применить сделанные изменения.
sudo firewall-cmd --reload
Создание виртуальных хостов Apache на CentOS 8
Рекомендуемый способ создания виртуальных хостов в CentOS 8 — это создание отдельной папки для каждого из них. Название папки не имеет значения, но удобно использовать имя, которое можно быстро идентифицировать.
В данном случае мы будем использовать в качестве домена test.setiwik.ru. Конечно же мой домен это для примера, вы используйте свой.
Сначала создайте папку:
sudo mkdir /var/www/test.setiwik.ru
После этого сделайте Apache владельцем папки, чтобы все работало нормально.
sudo chown apache:apache /var/www/test.setiwik.ru
Если необходимо, то вы можете назначить папке специальные разрешения.
sudo chmod -R 755 /var/www/test.setiwik.ru
Теперь необходимо создать новый файл конфигурации. Этот файл должен находиться в папке /etc/httpd/conf.d/. Название также не имеет большого значения, но оно должно быть понятным для вас.
Например:
sudo nano /etc/httpd/conf.d/test.setiwik.ru.conf
В этот файл нужно добавить всю конфигурацию Apache для этого сайта. Просто добавьте следующие строки.
<virtualhost *:80>
ServerName test.setiwik.ru
DocumentRoot /var/www/test.setiwik.ru
ErrorLog /var/log/httpd/test.setiwik.ru-error.log
CustomLog /var/log/httpd/test.setiwik.ru-access.log combined
</virtualhost>
ServerName определяет имя домена;
DocumentRoot определяет путь, где находится наш сайт; если вы хотите, чтобы несколько доменов указывали на сайт, вы можете сделать это с помощью директивы ServerAlias, разделяя запятыми каждый из них.
Сохраните изменения и закройте редактор.
Чтобы изменения вступили в силу требуется перезагрузка веб-сервера.
sudo systemctl restart httpd
Доступ к новому виртуальному хосту
Теперь создайте HTML документ для тестирования. Например,
sudo nano /var/www/test.setiwik.ru/index.html
И добавьте немного контента, например:
<html>
<body>
Привет, добро пожаловать на SETIWIK
</body>
</html>
Сохраните изменения и закройте редактор.
Теперь откройте веб-браузер и посетите сайт http://test.setiwik.ru. Если ваш сайт работает, то вы все сделали правильно.
Настройка виртуальных хостов Apache на CentOS 8Заключение
В этой статье вы узнали, как легко настроить виртуальные хосты Apache на CentOS 8 / Rocky Linux 8. Также мы показали вам, как сделать это очень простым способом.
Подробное обсуждение сопоставления виртуальных хостов
HTTP-сервер Apache, версия 2.4
Доступные языки: en | фр | ко | tr
Этот документ пытается объяснить именно то, что делает Apache HTTP Server при выборе виртуального хоста служить запрос от.
Большинство пользователей должны прочитать о Виртуальные хосты на основе имени и на основе IP, чтобы решить, какой тип они хотите использовать, то узнайте больше о основанных на именах или виртуальные хосты на основе IP, а затем см. Некоторые примеры.
Если вы хотите разобраться во всех деталях, то можете вернуться на эту страницу.
- Файл конфигурации
- Соответствие виртуального хоста
- Советы
См. также
- Поддержка виртуальных хостов на основе IP
- Поддержка виртуальных хостов на основе имен
- Примеры виртуальных хостов для стандартных настроек
- Динамически настроенный массовый виртуальный хостинг
- Комментарии
разделов. Есть виртуальные
серверы, называемые vhosts , которые определяются <Виртуальный хост>
разделы.
Каждая директива VirtualHost
включает один
или более адресов и дополнительных портов.
Имена хостов могут использоваться вместо IP-адресов в виртуальном определение хоста, но они разрешаются при запуске и если любое имя разрешения не выполняются, эти определения виртуальных хостов игнорируются. Поэтому это не рекомендуется.
Адрес может быть указан как *
, что будет соответствовать запросу, если нет
другой виртуальный хост имеет явный адрес, на который был отправлен запрос
полученный.
Адрес, появляющийся в VirtualHost
директива может иметь необязательный порт. Если порт не указан,
он рассматривается как подстановочный порт, который также может быть указан
явно используя
.
Порт с подстановочным знаком соответствует любому порту.
(Номера портов указаны в VirtualHost
директива сделать
не влияют на то, какие номера портов будет прослушивать Apache, они только контролируют
который VirtualHost
будет выбран для обработки запроса.
Используйте директиву Listen
для
контролировать адреса и порты, на которых сервер прослушивает.)
В совокупности весь набор адресов (включая несколько результаты поиска DNS) называются набор адресов .
Apache автоматически различает
основа HTTP Заголовок узла
, предоставленный клиентом
всякий раз, когда наиболее конкретное совпадение для комбинации IP-адреса и порта
указан в нескольких виртуальных хостах.
Имя_сервера
директива
может появиться где угодно в пределах определения сервера. Однако,
каждое появление переопределяет предыдущее появление (в пределах этого
сервер). Если ServerName
не указано, сервер
пытается вывести его из IP-адреса сервера.
Первый виртуальный хост на основе имени в файле конфигурации для заданная пара IP:порт важна, потому что она используется для всех запросы, полученные на тот адрес и порт, для которых нет других vhost для этой пары IP:порт имеет соответствующее имя сервера или Псевдоним сервера. Он также используется для всех SSL-соединений, если server не поддерживает индикацию имени сервера.
Полный список имен в VirtualHost
директивы обрабатываются так же, как (без подстановочных знаков) ServerAlias
(но не переопределяются какой-либо инструкцией ServerAlias
).
Для каждого виртуального хоста устанавливаются различные значения по умолчанию. В в частности:
- Если vhost не имеет
ServerAdmin
,Время ожидания
,KeepAliveTimeout
,KeepAlive
,MaxKeepAliveRequests
,ReceiveBufferSize
, илиSendBufferSize
директива, то соответствующее значение наследуется от основной сервер. (То есть, унаследованное от любого конечного установка этого значения находится на основном сервере.) - «Поиск по умолчанию», определяющий каталог по умолчанию. разрешения для виртуального хоста объединяются с разрешениями основной сервер. Это включает в себя любую конфигурацию для каждого каталога информация для любого модуля.
- Конфигурации каждого сервера для каждого модуля из основной сервер объединен с сервером vhost.
По сути, главный сервер рассматривается как «по умолчанию» или «база», на которой будет строиться каждый виртуальный хост. Но позиционирование эти основные определения сервера в файле конфигурации в значительной степени неактуально — вся конфигурация основного сервера была анализируется, когда происходит это окончательное слияние. Так что даже если главный сервер определение появляется после определения виртуального хоста, это может повлиять на определение виртуального хоста.
Если на основном сервере нет ServerName
на данный момент
точка, затем имя хоста машины, которая httpd
вместо этого используется. Назовем адрес основного сервера установить те IP-адреса, которые возвращаются поиском DNS на ServerName
главного сервера.
Для любых неопределенных ServerName
полей
vhost на основе имени по умолчанию использует адрес, указанный первым в Оператор VirtualHost
, определяющий vhost.
Любой виртуальный хост, включающий магию _default_
подстановочный знак получает тот же ServerName
, что и
основной сервер.
Сервер определяет, какой виртуальный хост использовать для запроса, как следующим образом:
Поиск IP-адреса
Когда соединение впервые получено по какому-либо адресу и порту,
сервер ищет все определения VirtualHost
которые имеют одинаковый IP-адрес и порт.
Если нет точного совпадения адреса и порта, то
подстановочный знак ( *
) учитываются совпадения.
Если совпадений не найдено, запрос обслуживается основной сервер.
Если есть определения VirtualHost
для
IP-адрес, следующим шагом будет решить, должны ли мы
иметь дело с виртуальным хостом на основе IP или имени.
Vhost на основе IP
Если имеется ровно одна директива VirtualHost
перечисление комбинации IP-адреса и порта, которая была определена
для наилучшего совпадения, никаких дальнейших действий не выполняется и
запрос обслуживается с соответствующего виртуального хоста.
vhost на основе имени
Если имеется несколько директив VirtualHost
комбинация IP-адреса и порта, которая была определена как
наилучшее совпадение, «список» в оставшихся шагах относится к списку vhosts
которые совпали, в том порядке, в котором они были в файле конфигурации.
Если соединение использует SSL, сервер поддерживает указание имени сервера и
рукопожатие клиента SSL включает расширение TLS с
запрошенное имя хоста, то это имя хоста используется ниже точно так же, как Хост: заголовок
будет использоваться для соединения без SSL.
В противном случае первый виртуальный хост на основе имени, адрес которого совпадает,
используется для SSL-соединений. Это важно, потому что
vhost определяет, какой сертификат сервер будет использовать для
связь.
Если запрос содержит поле заголовка Host:
,
list ищется первый vhost с совпадающим ServerName
или ServerAlias
и
запрос обслуживается с этого виртуального хоста. А Хост: заголовок
поле может содержать номер порта, но Apache всегда его игнорирует и
соответствует реальному порту, на который клиент отправил
запрос.
Первый vhost в конфиге
файл с указанным IP-адресом имеет наивысший приоритет
и перехватывает любой запрос к неизвестному имени сервера или запрос
без поля заголовка Host:
(например, HTTP/1.0
запрос).
Постоянные соединения
Поиск IP , описанный выше, выполняется только один раз на конкретный сеанс TCP/IP, в то время как поиск имени выполняется на каждые запросов во время KeepAlive/persistent связь. Другими словами, клиент может запросить страницы из разные виртуальные хосты на основе имен в течение одного постоянного связь.
Абсолютный URI
Если URI из запроса является абсолютным URI и его имя хоста и порт соответствуют основному серверу или одному из настроенные виртуальные хосты и совпадают по адресу и порт, на который клиент отправил запрос, то префикс схемы/имени хоста/порта удаляется, а оставшийся относительный URI обслуживается соответствующим основным сервером или виртуальный хост. Если не совпадает, остается URI нетронутым, и запрос считается прокси-запросом.
Наблюдения
- Виртуальный хостинг на основе имени — это процесс, применяемый после сервер выбрал наиболее подходящий виртуальный IP-адрес. хозяин.
- Если вам все равно, к какому IP-адресу подключился клиент, используйте «*» в качестве адреса каждого виртуального хоста и виртуального хостинга на основе имени применяется ко всем настроенным виртуальным хостам.
-
Имя_сервера
иПсевдоним сервера
проверки никогда не выполняются для виртуального хоста на основе IP. - Только заказ виртуальные хосты на основе имени для определенного набора адресов имеют большое значение. Один виртуальный хост на основе имени, который идет первым в конфигурационный файл имеет наивысший приоритет для своего установлен соответствующий адрес.
- Любой порт в поле заголовка
Host:
никогда не используется во время процесс сопоставления. Apache всегда использует реальный порт, к которому клиент отправил запрос. - Если два виртуальных хоста имеют общий адрес, эти общие адреса действовать как виртуальные хосты на основе имени неявно. Это новое поведение с 2.3.11.
- Основной сервер используется только для обслуживания запроса, если IP-адрес
адрес и номер порта, к которому подключился клиент
не соответствует ни одному виртуальному хосту (включая
*
vhost). Другими словами, основной сервер ловит только запрос на неуказанный адрес/порт комбинация (если нет_default_
vhost который соответствует этому порту). - Никогда не следует указывать DNS-имена в
Директивы VirtualHost
, потому что это заставит ваш сервер, чтобы полагаться на DNS для загрузки. Кроме того, это создает угроза безопасности, если вы не контролируете DNS для всех перечислены домены. Есть больше информация, доступная по этому и следующим двум темы. -
Имя_сервера
должно всегда устанавливаться для каждого вхост. В противном случае требуется поиск DNS для каждого вхост.
В дополнение к советам на странице проблем с DNS, здесь еще несколько советов:
- Поместите все определения основных серверов перед любыми
определений VirtualHost
. (Это в помощь удобочитаемость конфигурации — слияние после конфигурации процесс делает неочевидным, что определения смешиваются вокруг виртуальные хосты могут повлиять на все виртуальные хосты.)
Примечание:
Это не раздел вопросов и ответов. Комментарии, размещенные здесь, должны указывать на предложения по улучшению документации или сервера и могут быть удалены нашими модераторами, если они либо реализованы, либо считаются недействительными/не по теме. Вопросы о том, как управлять HTTP-сервером Apache, следует направлять либо на наш IRC-канал #httpd, на Libera. chat, либо в наши списки рассылки.
Динамически настроенный массовый виртуальный хостинг
HTTP-сервер Apache версии 2.4
Доступные языки: en | фр | ко | tr
В этом документе описывается, как эффективно обслуживать
произвольное количество виртуальных хостов с HTTP-сервером Apache. А
отдельный документ обсуждает использование mod_rewrite
для создания динамических массовых виртуальных хостов.
- Мотивация
- Обзор
- динамических виртуальных хостов с mod_vhost_alias
- Упрощенные динамические виртуальные хосты
- Использование нескольких виртуальных Хостинг-системы на одном сервере
- Более эффективный виртуальный хостинг на базе IP
- Массовые виртуальные хосты с mod_rewrite
- Масса виртуальных хостов с mod_macro
См. также
- Комментарии
Описанные здесь методы представляют интерес, если вы httpd. conf
содержит много
разделов, которые
по существу такой же, например:
<Виртуальный хост 111.22.33.44> имя_сервера customer-1.example.com DocumentRoot "/www/hosts/customer-1.example.com/docs" ScriptAlias "/cgi-bin/" "/www/hosts/customer-1.example.com/cgi-bin" виртуальный хост> <Виртуальный хост 111.22.33.44> имя_сервера customer-2.example.com DocumentRoot "/www/hosts/customer-2.example.com/docs" ScriptAlias "/cgi-bin/" "/www/hosts/customer-2.example.com/cgi-bin" виртуальный хост> <Виртуальный хост 111.22.33.44> Имя_сервера клиент-N.example.com DocumentRoot "/www/hosts/customer-N.example.com/docs" ScriptAlias "/cgi-bin/" "/www/hosts/customer-N.example.com/cgi-bin" Виртуальный хост>
Мы хотим заменить эти несколько
блоков с механизмом
который обрабатывает их динамически. Это имеет ряд
преимущества:
- Ваш файл конфигурации меньше, поэтому Apache запускается быстрее и использует меньше памяти. Возможно, что более важно, меньшая конфигурация проще в обслуживании и оставляет меньше места за ошибки.
- Добавление виртуальных хостов — это просто вопрос создания соответствующие каталоги в файловой системе и записи в DNS — вам не нужно перенастраивать или перезапускать Apache.
Основным недостатком является то, что вы не можете иметь другой файл журнала для каждый виртуальный хост; однако, если у вас много виртуальных хостов, выполнение в любом случае это может быть плохой идеей из-за количества необходимых файловых дескрипторов. Лог лучше в трубу или в фифу, и организовать процесс на другом конце, чтобы разделить журнал файлы в один для каждого виртуального хоста. Одним из примеров такого процесса может можно найти в разделенном лог-файле полезность.
Виртуальный хост определяется двумя элементами информации: его
IP-адрес и содержимое Хост: заголовок
в HTTP-запросе. Техника динамического массового виртуального хостинга
используется здесь, основан на автоматической вставке этой информации в
путь к файлу, который используется для удовлетворения запроса. Этот
проще всего сделать с помощью mod_vhost_alias
с Apache httpd. Альтернативно,
mod_rewrite может
использоваться.
Оба эти модуля по умолчанию отключены; вы должны включить один из них при настройке и сборке Apache httpd, если вы хотите используйте эту технику.
Из запроса в
чтобы сделать динамику
виртуальный хост выглядит как обычный. Наиболее важным является
имя сервера, которое используется сервером для генерации
самореферентные URL-адреса и т. д. Он настроен с ServerName
директива, и она доступна для CGI
через переменную среды SERVER_NAME
.
фактическое значение, используемое во время выполнения, контролируется параметром UseCanonicalName
.
параметр. С UseCanonicalName Off
, имя сервера
берется из содержимого заголовка Host:
в
запрос. С UseCanonicalName DNS
берется из
обратный DNS-поиск IP-адреса виртуального хоста. Бывший
параметр используется для динамического виртуального хостинга на основе имени, а параметр
последний используется для хостинга на основе IP. Если httpd не работает
имя сервера, поскольку отсутствует заголовок Host:
,
или поиск DNS завершается ошибкой, то значение, настроенное с помощью
9Вместо этого используется 0037 ServerName .
Другая вещь, которую нужно определить, это корень документа (настроенный
с DocumentRoot
и доступен для сценариев CGI через DOCUMENT_ROOT
переменная среды). В обычном
конфигурации, это используется основным модулем, когда
сопоставление URI с именами файлов, но когда сервер настроен на
сделать динамический виртуальный хостинг, эту работу должен взять на себя другой
модуль (либо mod_vhost_alias
, либо mod_rewrite
), у которого есть другой способ сделать
отображение. Ни один из этих модулей не отвечает за
установка переменной среды DOCUMENT_ROOT
, поэтому
если какие-либо документы CGI или SSI используют его, они получат
вводящее в заблуждение значение.
Этот фрагмент из httpd.conf
реализует
расположение виртуального хоста, описанное в разделе «Мотивация» выше
используя mod_vhost_alias
.
# получить имя сервера из заголовка Host: UseCanonicalName Выкл. # этот формат журнала может быть разделен для каждого виртуального хоста на основе первого поля # с помощью утилиты split-logfile. LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon CustomLog "logs/access_log" vcommon # включить имя сервера в имена файлов, используемых для удовлетворения запросов VirtualDocumentRoot "/www/hosts/%0/docs" VirtualScriptAlias "/www/hosts/%0/cgi-bin"
Эту конфигурацию можно изменить на виртуальную на основе IP.
хостинговое решение, просто повернув UseCanonicalName
Off
в UseCanonicalName DNS
. Сервер
имя, которое вставляется в имя файла, затем получается из
IP-адрес виртуального хоста. Переменная %0
ссылается на запрошенное имя сервера, как указано в Хост: заголовок
.
Дополнительные сведения об использовании см. в документации mod_vhost_alias
.
Примеры.
Это корректировка вышеуказанной системы, предназначенная для
Сервер веб-хостинга провайдера. Используя %2
,
мы можем выбрать подстроки имени сервера для
использовать в имени файла, чтобы, например, документы для www.user.example.com
находятся в /дом/пользователь/www
. Он использует один cgi-bin
каталог вместо одного на виртуальный хост.
UseCanonicalName Выкл. LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon CustomLog "logs/access_log" vcommon # включить часть имени сервера в имена файлов VirtualDocumentRoot "/home/%2/www" # один каталог cgi-bin ScriptAlias "/cgi-bin/" "/www/std-cgi/"
Есть примеры более сложных Параметры VirtualDocumentRoot
в mod_vhost_alias
документация.
При более сложных настройках вы можете использовать обычный httpd
директивы для управления
охват различных конфигураций виртуального хостинга. Для
например, у вас может быть один IP-адрес для домашних страниц обычных клиентов,
и еще один для коммерческих клиентов со следующей настройкой.
Это можно сочетать с обычным
разделов конфигурации, как показано
ниже.
UseCanonicalName Выкл. LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon <Каталог "/www/commercial"> Параметры Разрешить переопределить все Каталог> <Каталог "/www/homepages"> Параметры Аллововеррайд Каталог> <Виртуальный хост 111.22.33.44> Имя сервера www.commercial.example.com CustomLog "logs/access_log.commercial" vcommon VirtualDocumentRoot "/www/commercial/%0/docs" VirtualScriptAlias "/www/commercial/%0/cgi-bin" виртуальный хост> <Виртуальный хост 111.22.33.45> Имя сервера www.homepages. example.com CustomLog "logs/access_log.homepages" vcommon VirtualDocumentRoot "/www/homepages/%0/docs" ScriptAlias "/cgi-bin/" "/www/std-cgi/" Виртуальный хост>
Примечание
Если первый блок VirtualHost содержит , а не , включает ServerName
директива, обратная
Вместо этого будет использоваться DNS соответствующего IP-адреса.
Если это не имя сервера, которое вы
хотите использовать, поддельная запись (например, ServerName
none.example.com
) можно добавить, чтобы обойти это
поведение.
Изменения конфигурации предложили включить первый пример в настройку виртуального хостинга на основе IP приводит к довольно неэффективная установка. Новый поиск DNS требуется для каждого запрос. Чтобы избежать этих накладных расходов, файловая система может быть организована так, чтобы соответствуют IP-адресам, а не именам хостов, тем самым отрицая необходимость поиска DNS. Логирование тоже придется настраивать чтобы соответствовать этой системе.
# получить имя сервера из обратного DNS IP-адреса UseCanonicalName DNS # включить IP-адрес в журналы, чтобы они могли быть разделены LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon CustomLog "logs/access_log" vcommon # включить IP-адрес в имена файлов VirtualDocumentRootIP "/www/hosts/%0/docs" VirtualScriptAliasIP "/www/hosts/%0/cgi-bin"
Массовый виртуальный хостинг также может быть реализован с использованием mod_rewrite
, либо используя простые директивы RewriteRule
, либо используя больше
сложные методы, такие как внешнее хранение определений vhost
и доступ к ним через Переписать карту
. Эти методы
обсуждалось в перезаписи
документация.
Другой вариант для динамически генерируемых виртуальных хостов: mod_macro
, с помощью которого можно создать виртуальный хост
шаблон и вызывать его для нескольких имен хостов. Примером этого является
предоставлено в разделе Usage модуля
документация.