Apache 2 настройка виртуальных хостов. Настройка виртуальных хостов на Apache для начинающих

Как все мы знаем, Apache — очень мощный, очень гибкий и настраиваемый веб-сервер для ОС *Nix . Здесь, в этом руководстве, мы собираемся обсудить еще одну особенность Apache, которая позволяет нам размещать более одного веб-сайта на одной машине с Linux. Внедрение виртуального хостинга с веб-сервером Apache может помочь вам сэкономить средства, которые вы инвестируете в обслуживание вашего сервера и его администрирование.

Концепция общего веб-хостинга и реселлерского веб-хостинга основана только на этой возможности Apache .

Типы виртуальных хостов

Существует два типа виртуального хостинга, доступных с Apache.

Виртуальный хостинг на основе имени

С помощью на основе имени вы можете разместить несколько доменов / сайтов на одном компьютере с одним IP . Все домены на этом сервере будут использовать один IP-адрес. Это легче настроить, чем виртуальный хостинг на основе IP, вам нужно только настроить DNS домена, чтобы сопоставить его с правильным IP-адресом, а затем настроить Apache для распознавания его по доменным именам.



Виртуальный хостинг на основе IP

Виртуальный хостинг на основе IP позволяет назначить отдельный IP-адрес для каждого домена на одном сервере, эти IP-адреса могут быть подключены к серверу с помощью одной карты NIC и нескольких сетевых карт.

Давайте настроим Виртуальный хостинг на основе имени и Виртуальный хостинг на основе IP в RHEL, CentOS и Fedora .

Тестовая среда
  1. ОС CentOS 6.5
  2. Приложение веб-сервер Apache
  3. IP-адрес 192.168.0.100
  4. IP-адрес 192.168.0.101
  5. Домен www.example1.com
  6. Домен www.example2.com

Как настроить виртуальные хосты Apache на основе IP и имен

Перед настройкой виртуального хостинга с Apache на вашей системе должно быть установлено программное обеспечение Apache Web. если нет, установите его с помощью установщика пакета по умолчанию, называемого yum.

# yum install httpd

Настройка имени на основе виртуального хоста

Но перед созданием виртуального хоста вам необходимо создать каталог, в котором вы будете хранить все файлы вашего сайта. Итак, создайте каталоги для этих двух виртуальных хостов в папке /var/www/html . Помните, что
/var/www/html будет корневым каталогом документов по умолчанию в виртуальной конфигурации Apache.

# mkdir /var/www/html/example1.com/
# mkdir /var/www/html/example2.com/

Чтобы настроить виртуальный хостинг на основе имен, вы должны указать Apache, какой IP-адрес вы будете использовать для получения запросов Apache для всех веб-сайтов или доменных имен. Мы можем сделать это с помощью директивы NameVirtualHost . Откройте основной файл конфигурации Apache с помощью редактора VI .

# vi /etc/httpd/conf/httpd.conf

Найдите NameVirtualHost и раскомментируйте эту строку, удалив перед ней знак # .

NameVirtualHost

Затем добавьте IP-адрес, с которым вы хотите получать запросы Apache. После изменений ваш файл должен выглядеть следующим образом:

NameVirtualHost 192.168.0.100:80

Теперь пришло время для настройки виртуальных разделов хоста для ваших доменов, перейдите к нижней части файла, нажав Shift + G . Здесь, в этом примере, мы настраиваем разделы виртуального хоста для двух доменов.

  1. www.example1.com
  2. www.example2.com

Добавьте следующие две виртуальные директивы внизу файла. Сохраните и закройте файл.


DocumentRoot /var/www/html/example1.com
ServerName www.example1.com
CustomLog logs/www.example1.com-access_log common


DocumentRoot /var/www/html/example2.com
ServerName www.example2.com
CustomLog logs/www.example2.com-access_log common

Вы можете добавить столько директив, сколько хотите добавить в раздел виртуальных хостов ваших доменов. Когда вы закончите с изменениями в файле httpd.conf , пожалуйста, проверьте синтаксис файлов с помощью следующей команды.

# httpd -t

Syntax OK

Рекомендуется проверять синтаксис файла после внесения некоторых изменений и перед перезапуском веб-сервера, поскольку в случае неправильного синтаксиса Apache откажется работать с некоторыми ошибками и в конечном итоге повлияет на работу существующего веб-сервера на некоторое время, если «syntax OK» . Перезапустите ваш веб-сервер и добавьте его в chkconfig, чтобы ваш веб-сервер запускался на уровнях запуска 3 и 5 только во время загрузки.


Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[ root @ tecmint ~] # chkconfig --level 35 httpd on

Теперь пришло время создать тестовую страницу с именем index.html, добавить некоторое содержимое в файл, чтобы у нас было что проверить, когда IP-адрес вызывает виртуальный хост.

# vi /var/www/html/example1.com/index.html

www.example1.com


Hello, Welcome to www.example1.com.



[ root @ tecmint ~] # vi /var/www/html/example2.com/index.html

www.example2.com


Hello, Welcome to www.example2.com.



Как только вы закончите с этим, вы можете проверить настройки, открыв оба домена в браузере.

Http://www.example1.com http://www.example2.com

Предварительный просмотр: www.example1.com

Виртуальный хостинг: www.example1.com
Виртуальный хостинг: www.example2.com

Настройка виртуального хостинга на базе IP Linux

Чтобы настроить виртуальный хостинг на основе IP, вы должны иметь более одного IP-адреса / порта, назначенного вашему серверу или вашему компьютеру Linux.

Это может быть одна карта NIC , например: eth0: 1 , eth0: 2 , eth0: 3 … и так далее. Можно также подключить несколько сетевых карт. Если вы не знаете, как создать несколько IP-адресов на одном сетевом адаптере , следуйте приведенному ниже руководству, которое поможет вам в создании.

Целью реализации виртуального хостинга на основе IP является назначение реализации для каждого домена, и этот конкретный IP не будет использоваться никаким другим доменом.

Этот тип настройки требуется, когда веб-сайт работает с сертификатом SSL (mod_ssl ) или на разных портах и ​​IP-адресах. Вы также можете запустить несколько экземпляров Apache на одном компьютере. Чтобы проверить IP-адреса, подключенные к вашему серверу, проверьте его с помощью команды ifconfig .

Root @ tecmint ~] # ifconfig

Пример вывода
eth0 Link encap:Ethernet HWaddr 08:00:27:4C:EB:CE
inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe4c:ebce/64 Scope:Link
RX packets:17550 errors:0 dropped:0 overruns:0 frame:0
TX packets:15120 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16565983 (15.7 MiB) TX bytes:2409604 (2.2 MiB)
eth0:1 Link encap:Ethernet HWaddr 08:00:27:4C:EB:CE
inet addr:192.168.0.101 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1775 errors:0 dropped:0 overruns:0 frame:0
TX packets:1775 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
RX bytes:3416104 (3.2 MiB) TX bytes:3416104 (3.2 MiB)

Как видно из вышеприведенного вывода, два IP-адреса 192.168.0.100 (eth0 ) и 192.168.0.101 (eth0: 1 ) подключены к серверу, оба IP-адреса назначены одному физическому сетевому устройству (eth0 ).

Теперь, назначив определенный IP / порт для получения http-запросов, вы можете просто сделать это, изменив директиву Listen в файле httpd.conf .

# vi /etc/httpd/conf/httpd.conf

Ищите слово «Listen ». Вы найдете раздел, в котором написано краткое описание директивы Listen. В этом разделе прокомментируйте оригинальную строку и напишите собственную директиву ниже этой строки.

# Listen 80
Listen 192.168.0.100:80

Теперь создайте разделы виртуального хоста для обоих доменов. Перейдите в конец файла и добавьте следующие виртуальные директивы.


ServerAdmin [email protected]
DocumentRoot /var/www/html/example1
ServerName www.example1.com
ErrorLog logs/www.example1.com-error_log
TransferLog logs/www.example1.com-access_log


ServerAdmin [email protected]
DocumentRoot /var/www/html/example2
ServerName www.example2.com
ErrorLog logs/www.example2.com-error_log
TransferLog logs/www.example2.com-access_log

Теперь, поскольку вы изменили основной файл конфигурации Apache, вам нужно перезапустить службу http, как показано ниже.

# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]

Проверьте настройки виртуального хостинга на основе IP, открыв URL-адреса в веб-браузере, как показано ниже.

Http://www.example1.com
http://www.example2.com

Это все, что касается виртуального хоста Apache сегодня.

В данной статье я расскажу, как добавить виртуальные хосты в Apache.

Виртуальные хосты предназначены для того, чтобы создавать несколько сайтов на одном сервере. Фактически каждый виртуальный хост представляет собой отдельный сайт, со своим адресом и директорией, где размещаются его файлы.

После установки Apache создается один виртуальный хост с именем localhost. Вы можете открыть его в браузере по адресу http://localhost . Директория, в которой размещаются файлы данного сайта /Library/WebServer/Documents .

Есть несколько способов для добавления своих хостов в Apache. Можно прописать информацию о них в одном файле, а можно создать для каждого хоста свой отдельный конфигурационный файл с соответсвующим именем. Я буду использовать второй способ.

Файлы с настройками хостов мы будем размещать в одной директории /private/etc/apache2/vhosts . Файлы будут иметь имена вида mysite.local.conf .

Подключаем vhosts

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

Откройте файл для редактирования, для этого выполните в терминале команду:

Sudo nano /etc/apache2/httpd.conf

Найдите в файле строку #Include /private/etc/apache2/extra/httpd-vhosts.conf .

Под этой строкой добавьте новую строку:

Include /private/etc/apache2/vhosts/*.conf

Сохраните изменения и закройте файл. Чтобы закрыть файл и сохранить изменения, нажмите Ctrl+X , затем введите Y и нажмите Enter .

Настраиваем виртуальные хосты

Создадим директорию /private/etc/apache2/vhosts , которую мы добавили в кофигурацию Apache на предыдущем шаге. Чтобы создать директорию выполните в терминале команду:

Sudo mkdir /private/etc/apache2/vhosts

Перейдем в эту директорию:

Cd /private/etc/apache2/vhosts

Создадим конфигурационный файл _default.conf . В нем мы пропишем конфигурацию виртуального сервера по умолчанию. Создайте новый файл, выполнив в терминале:

Sudo nano _default.conf

Введите следующую конфигурацию:

DocumentRoot "/Library/WebServer/Documents"

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

Теперь создадим конфигурацию для нашего виртуального хоста (сайта). Для примера мы будем создавать сайт с адресом mysite.local , а файлы сайта будем размещать в домашней директории в каталоге mysite (полный путь будет иметь вид /Users/Yury/mysite , вместо Yury должно быть ваше имя пользователя).

Выполните в терминале:

Sudo nano mysite.local.conf

DocumentRoot "/Users/Yury/mysite" ServerName mysite.local ErrorLog "/private/var/log/apache2/mysite.local-error_log" CustomLog "/private/var/log/apache2/mysite.local-access_log" common AllowOverride All Require all granted

В конфигурации мы указали директорию (/Users/Yury/mysite ), в которой располагаются файлы нашего сайта. Задали адрес сайта mysite.local . Указали, где будут храниться лог файлы с ошибками и информацией о доступе к сайту.

Перезапустите Apache:

Sudo apachectl restart

Прежде, чем наш сайт станет доступен по адресу http://mysite.local необходимо добавить информацию о нем в файл /etc/hosts .

Редактирование /etc/hosts

В файле /etc/hosts прописывается соответсвие IP адреса и текстовый адрес хоста (что-то вроде локального DNS).

Нам нужно добавить наш адрес mysite.local . Для этого откройте файл /etc/hosts :

Sudo nano /etc/hosts

И добавьте в файл строку:

127.0.0.1 mysite.local

Настраиваем права доступа

Иногда требуется выставить правильные права доступа на директорию, в которой хранятся файлы сайта. Если этого не сделать, то при доступе к сайту мы получим ошибку 403 Forbidden. Такую же ошибку мы получим, если директории не существует.

В нашем случае нам нужно установить права доступа на директорию /Users/Yury/mysite . Для этого выполните в терминале команду:

Chmod 755 /Users/Yury/mysite

Проверка работы

Теперь наберите в браузере адрес сайта: http://mysite.local

Если все пройдет успешно, то вы увидете ваш сайт.

В случае каких-либо ошибок можно просмотреть логи в файле /private/var/log/apache2/mysite.local-error_log

В этой статье написано, как создавать несколько виртуальных хостов на локальной машине. Данное действие необходимо уметь делать веб-мастерам, когда они разрабатывают несколько сайтов.

Вначале небольшое объяснение.

Что такое виртуальный хост? Это такая настройка локального веб-сервера, при которой веб-сервер начинает откликаться на заданное имя, а не только на IP 127.0.0.1 или псевдоним localhost . То есть, при настройке виртуального хоста на имя site.ru , в браузере по этому URL начнет отвечать локальный веб-сервер.

Веб-сервер можно настроить на несколько имен сайтов. Тогда веб-сервер начнет выдавать страницы, соответсвующие каталогу, в котором находятся данные для указанного имени. Например, есть два виртуальных хоста - site.ru и money.com . Для site.ru настроен рабочий каталог /var/www/site.ru , а для money.com настроен рабочий каталог /var/www/money.com . Если теперь в браузере обратиться к site.ru , то веб-сервер будет выдавать страницы из каталога /var/www/site.ru , а если обратиться к money.com , то веб-сервер будет генерировать страницы из каталога /var/www/money.com . Как сделать такую настройку и написано в данной статье.

В Debian 5.x.x , сервер Apache-2 сразу после установки готов работать с виртуальными хостами. Но настроен только на один (default) хост, который доступен как localhost . Чтобы добавить еще один виртуальный хост, надо сделать следущее:

1. В каталог /etc/apache2/sites-available нужно добавить пустой файл с произвольным именем. Для удобства, лучше давать имя файла, содержащее имя виртуального хоста. Например, если планируется добавить виртуальный хост с именем studio.ru , надо задатьдать имя файла studio.ru.conf .

2. В этот файл надо вписать (примерно) следующее:

ServerName studio.ru
ServerAlias www.studio.ru

DocumentRoot "/var/www/studio"


allow from all
Options +Indexes

  • ServerName, ServerAlias - это URL, набираемый в браузере, на который должен откликаться данный виртуальный хост;
  • DocumentRoot - это корневая директория данного виртуального хоста;
  • Секция Directory - настройка прав доступа к указанной директории. В данном случае настраиваются права доступа к корневой директории виртуального хоста.

Нужно обратить внимание на параметр секции VirtualHost. Здесь он написан как "*:80 ". Но обязательно нужно заглянуть в файл /etc/apache2/sites-available/default и посмотреть, какой параметр написан там в такой же секции VirtualHost. Если написано "* ", то в нашем файле надо так же написать "* ".

Другоми словами, нужно заглянуть в файл /etc/apache2/ports.conf . Там нужно найти директиву:

NameVirtualHost *:80

Какое значение стоит в этой директиве (здесь - "*:80 "), такое значение и нужно прописать в качестве параметра секции VirtualHost во всех файлах директории /etc/apache2/sites-available , иначе хосты видны не будут.

Частая ошибка - когда в /etc/apache2/ports.conf прописано "*.80", а в файле хоста в секции VirtualHost прописано "*". Несмотря на то, что маска "*" покрывает маску "*.80", сервер Apache не понимает такой записи. При такой настройке, сервер Apache не найдет нужного хоста!

3. Надо перейти в каталог /etc/apache2/sites-enabled и создать там символическую ссылку на созданный нами файл:

# cd /etc/apache2/sites-enabled
# ln -s /etc/apache2/sites-available/studio.ru.conf studio.ru.conf

4. Необходимо перезапустить Apache командами:

# /etc/init.d/apache2 stop
Stopping web server: apache2 ... waiting .

# /etc/init.d/apache2 start
Starting web server: apache2.

в момент перезапуска надо смотреть, не появляются ли в консоли сообщения об ошибках или предупреждения. В нормально сконфигурированном Апаче никаких сообщений о ошибках (и даже предупреждений!) выдаваться не должно.

5. Завершающее действие - нужно открыть файл /etc/hosts и прописать там новую строку следующего содержания:

127.0.0.1 studio.ru

это позволит браузеру обращаться локально к Апачу, а не искать данный сайт в интернете.

Все, конфигурирование закончено. Никаких перезагрузок не требуется.

Можно в браузере набрать URL http://studio.ru/index.html , и должен открыться файл /var/www/studio/index.html (если он есть). Таким образом, сразу видно, что виртуальный хост создался, и отображается в браузере. Подобным образом добавляются и другие виртуальные хосты.

После настройки файла httpd- vhosts. conf проверим правильность его конфигурации. В каталоге D:\ server\ Apache\ bin\ создайте файл httpd- S. cmd с содержимым:
“D:\server\Apache\bin\httpd.exe” –S
pause

После запуска этого файла вы увидите окно с отчетом о проверке, Syntax OK в конце говорит о том, что все настройки в порядке.

Теперь нужно прописать созданные хосты в файл C:\ Windows\ system32\ drivers\ etc\ hosts . Для этого открываем его текстовым редактором и вносим следующие записи:

127.0.0.1 www.host1.ru host1.ru #Чтобы не набирать www перед именем сайта, создаем зеркало
127.0.0.1 www.host2 host2 #Можно и без.ru создавать хосты
127.0.0.1 host3 #Самый распространенный вариант для локалки
127.0.0.1 localhost # Обычно уже указано, проследите чтобы случайно не удалили и не закомментировали.

Сохраните файл и перезапустите Apache. Попробуйте разместить в каталогах созданных вами виртуальных хостов какие-нибудь тестовые файлы (например index.html) и из браузера открыть хосты по адресам, указанным в директории ServerName каждого хоста.

Если вам приходится часто создавать виртуальные хосты и не очень хочется каждый раз редактировать все эти файлы и перезапускать Apache вручную, создайте в папке сервера (D:\ server\ ) файл createVH.cmd с таким содержимым:

@cls
@rem Получаем текущую папку. Если у вас структура папок сервера как у меня, но он установлен, например на другом диске, укажите здесь вместо %~dp0 путь с нему (например, D:\server\) косая черта в конце обязательна.
@set server_path=%~dp0
:dir_exist
@set /P new_dir="Enter new VHost name:"
@set /P ip_add="Enter your IP address:"
@ if exist %server_path%%new_dir% echo "VHost %new_dir% already exist. Please re-enter Vhost name."
@ if exist %server_path%%new_dir% goto dir_exist
@md %server_path%%new_dir%

@rem Здесь указывается путь до конфиг файла виртуальных хостов, если у вас другой, поменяйте
@set outputfile=%server_path%Apache\conf\extra\httpd-vhosts.conf
@echo. >> %outputfile%
@echo ^ >> %outputfile%
@echo ServerName %new_dir% >> %outputfile%
@echo DocumentRoot "%server_path%%new_dir%" >> %outputfile%
@echo ErrorLog "%server_path%logs\%new_dir%.error.log" >> %outputfile%
@echo CustomLog "%server_path%logs\%new_dir%.access.log" common >> %outputfile%
@echo ^ >> %outputfile%
@if %ip_add%==* set ip_host=127.0.0.1
@if not %ip_add%==* set ip_host=%ip_add%
@set hostfile=%windir%\system32\drivers\etc\hosts
@echo. >> %hostfile%
@echo %ip_host% %new_dir% >> %hostfile%
@set htmlfile=%server_path%%new_dir%\index.html
@echo ^ >> %htmlfile%
@echo ^ >> %htmlfile%
@echo ^%new_dir%^ >> %htmlfile%
@echo ^
>> %htmlfile%
@echo ^ >> %htmlfile%
@echo %new_dir% >> %htmlfile%
@echo ^
>> %htmlfile%
@echo ^
>> %htmlfile%
@rem Здесь путь до самого сервера, если у вас другой, поменяйте
@start %server_path%Apache\bin\httpd.exe -k restart

Теперь для создания хоста просто запустите этот файл, впишите в ответ имя нового хоста и IP, который будет указываться в секции VirtualHost файла httpd-vhosts.conf. По окончанию работы программа сама закроется. Вам останется только проверить созданный хост, набрав в адресной строке браузера имя, которое вы вписали в программу. Если все успешно прошло, то вы увидите страницу с именем нового хоста.

Обратите внимание, программа рассчитана на то, что структура каталогов сервера соответствует той, которую я указывал в первой статье. Если у вас установлен сервер по другим путям, поправьте файл в соответствии с ними.

Теги: apache, настройка сервера, начинающим

Термин Virtual Host (виртуальный хост) относится к практике запуска более чем одного сайта (такие как company1.example.com и company2.example.com) на одной машине. Виртуальные хосты могут быть "IP-based", что означает, что у вас есть различные IP адреса для каждого сайта, или "name-based", что означает, что у вас есть несколько имён, работающие на каждом IP адресе. Для конечного пользователя тот факт, что эти сайты работают на одном и том же физическом сервере, не является очевидным, то есть он может об этом и не знать.

Можно создать виртуальный хост Apache — один или сразу много. Суть хостов Apache в том, что в браузере вместо ввода IP к сайту можно обратиться по имени хоста — точно также как мы открываем все сайты в Интернете: мы вводим доменное имя, а не IP адрес сайта. Аналогично можно настроить и на локальном веб-сервере: в браузере вместо 127.0.0.1 или вместо localhost можно открывать свои локальные сайты, например, по легко запоминающимся именам.

Особенности настройки виртуальных хостов Apache в Windows

Прежде чем приступить к настройке, совсем немного теории: при открытии сайтов по доменному имени или по имени хоста, веб-браузеру всё равно нужно знать IP адрес веб-сервера, куда делается запрос. Эту проблему решают DNS сервера. То есть перед открытием они спрашивают у сервера имён DNS, какой IP имеет сайт, например, ?

Поскольку мы не можем добавить запись в DNS сервер для нашего локального сайта, мы воспользуемся другой возможностью операционной системы.

Суть в том, что аналогичные записи, как в DNS сервер, можно добавить в системный файл и Windows перед тем, как отправить запрос к DNS серверу, также сделает запрос к этому файлу.

Допустим я хочу создать виртуальный хост Apache с именем php.test , тогда я открываю файл C:\Windows\System32\drivers\etc\hosts и добавляю в него запись

127.0.0.1 php.test

Вы можете добавить в этот файл любое количество хостов с указанием любых IP адресов. Каждая запись должна быть на собственной строке. Первым должен быть помещён IP адрес, а затем соответствующее имя хоста. IP адрес и имя хоста должны быть разделены хотя бы одним пробелом. Вместо пробела можно использовать табуляцию (Tab).

В этом файле можно вставлять комментарии — комментариями считаются все строки, которые начинаются с символа # (решётка). Комментарии могут быть как размещены на отдельных строках, так и следовать после имени машины. Итак, мы выполнили подготовительный этап — прописали имя нашего виртуального хоста в файле hosts . В результате запрос, сделанный к этому виртуальному хосту, теперь будет перенаправляться веб-серверу Apache — именно этого мы и добивались.

Настройка в Apache виртуальных остов на основе имени

Теперь нам нужно сделать так, чтобы сам веб-сервер Apache мог обрабатывать пришедший запрос для определённого хоста. То есть мы наконец-то переходим к настройке Apache.

Откройте главный конфигурационный файл httpd.conf (например у меня он расположен по адресу C:\Server\bin\Apache24\conf\httpd.conf ).

Найдите там строку:

#Include conf/extra/httpd-vhosts.conf

И раскомментируйте её, чтобы получилось:

Include conf/extra/httpd-vhosts.conf

Найдите строку

LoadModule log_config_module modules/mod_log_config.so

и убедитесь, что она раскомментирована.

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

Теперь откройте сам файл httpd-vhosts.conf (c:\Server\bin\Apache24\conf\extra\httpd-vhosts.conf ). Содержимое этого файла можно просто удалить — оно нам не понадобится.

Виртуальные хосты описываются в контейнере . Внутри этого контейнера можно указать практически любые директивы Apache. Но обязательными являются только две:

  • ServerName — определяет само имя хоста
  • DocumentRoot — определяет, какие файлы показывать для этого имени, то есть содержит путь до сайта этого хоста

Секций может быть любое количество — столько, сколько вам нужно виртуальных хостов на данном сервере.

Ещё одно правило: первый раздел VirtualHost используется для сбора всех запросов, которые не соответствуют ServerName или ServerAlias в любом другом блоке . То есть первая секция является как бы дефолтной — для всех остальных запросов, которые не предназначены для виртуальных хостов. Поэтому нам нужно сделать как минимум два контейнера :

  1. Будет собирать запросы, которые не предназначены ни для какого из хостов. Обычные запросы, например, к localhost или 127.0.0.1
  2. Контейнер самого хоста (у меня хост называется php.test)

Что будет если не сделать первый («дефолтный») контейнер? Все запросы, которые даже те, которые не предназначаются для php.test, всё равно будут обрабатываться как будто бы они пришли для хоста php.test.

Вместе с контейнером VirtualHost можно указать IP адрес и порт, которые прослушиваются для данного хоста. Если вы используете какой-то нестандартный порт, который ещё не открыт с помощью директивы Listen , то вам нужно добавить эту директиву с соответствующим портом в главный конфигурационный файл или прямо в файл httpd-vhosts.conf . Например, я хочу, чтобы виртуальный хост был привязан к порту 81, тогда перед VirtualHost мне нужно добавить:

Listen 81

Для нашего примера я буду использовать стандартный 80 порт, а в качестве IP адреса укажу звёздочку. Дефолтным хостом у меня является localhost , файлы которого расположены по пути C:/Server/data/htdocs/ , тогда первый контейнер выглядит так:

Второй контейнер создан для хоста php.test , и его файлы будут располагаться в папке , тогда полностью код контейнера будет выглядеть так:

Собираем всё вместе, полное содержимое файла httpd-vhosts.conf :

ServerName localhost DocumentRoot "C:/Server/data/htdocs/" ServerName php.test DocumentRoot "C:/Server/data/htdocs/virthosts/host1/"

Чтобы сделанные изменения вступили в силу, перезапускаем веб-сервер:

C:\Server\bin\Apache24\bin\httpd.exe -k restart

Открываю в веб-браузере ссылку http://php.test и вижу там тот файл, который создан для этого хоста (то есть размещён в папке C:/Server/data/htdocs/virthosts/host1/ ):

Кроме этих самых необходимых директив, как уже было сказано, можно использовать практически любые настройки хостов, которые поддерживает главный конфигурационный файл Apache.

Например, кроме ServerName , можно добавить ещё ServerAlias :

ServerName dummy-host.example.com ServerAlias www.dummy-host.example.com

Можно установить отдельные файлы для каждого виртуального хоста:

ErrorLog "logs/dummy-host.example.com-error.log" CustomLog "logs/dummy-host.example.com-access.log" common

Установить с помощью директивы ServerAdmin электронную почту администратора данного виртуального хоста, отдельно для данного хоста. Кстати, настройки HTTPS нужно прописывать индивидуально для каждого виртуального хоста, поскольку у каждого из них свои собственные SSL сертификаты.

На уровне виртуальных хостов можно прописать правила mod_rewrite , настроить аутентификацию, контроль доступа и любые другие настройки, которые поддерживает Apache, можно перенести в конфигурацию виртуальных хостов для их тонкой и индивидуальной настройки.

Понравилась статья? Поделитесь ей
Наверх