Меню

Apache virtualhost настройка по порту



Виртуальные хосты Apache

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Vector vt 27 navigator настройка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Настройка вспышки sigma 610

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

Источник

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

Базовая настройка VirtualHost: порт 80, пользовательские логи

Настройка на 80 порту с обслуживанием нескольких виртуальных хостов

Настройка виртуального хоста с пользовательскими логами и идентификацией

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

28 Комментариев »

  1. мдя чувствую что этот блог надолго пропишетса в моих букмаках оченб полезные материалы здесь присутствуют

Комментарий от seo — Декабрь 22, 2006 @ 3:43 am

Парни, откройте для себя mod_macro

ServerAdmin $webmaster
ServerName $domain
DocumentRoot $docroot/htdocs
ErrorLog $docroot/logs/error_log
CustomLog $docroot/logs/access_log combined
Options Indexes FollowSymLinks MultiViews Includes
AllowOverride All
Order allow,deny
Allow from all
Options Indexes FollowSymLinks MultiViews Includes
AllowOverride All
#——————————————————————————-
ScriptAlias /cgi-bin/ «$docroot/cgi-bin/»
Alias /perl/ $docroot/perl/
AllowOverride All
Options +ExecCGI +FollowSymLinks
Order allow,deny
Allow from all
#——————————————————————————-
Use static_area $domain $docroot $webmaster
Use execute_area $docroot

Потом просто:

Use vhost aa.bb.cc.dd xxx.tomsk.ru /home/httpd/xxx.tomsk.ru admin@xxx.tomsk.su

Комментарий от Alexey A. Ukhov — Декабрь 22, 2006 @ 11:02 am

блин. вырезало половину
вот тут примеры есть
http://www.cri.ensmp.fr/

Комментарий от Alexey A. Ukhov — Декабрь 22, 2006 @ 11:03 am

Alexey, пришли мне конфиг на info(at)apachedev.ru — добавлю в нормальном виде!

Комментарий от Администратор — Декабрь 22, 2006 @ 3:05 pm

> ..чувствую что этот блог надолго пропишетса в моих букмаках…
Имхо RSS и удобнее и вспоминаешь про нужные сайты чаще

Комментарий от Администратор — Декабрь 22, 2006 @ 3:09 pm

ИМХО — вместо mod_macro лучше таки использовать нормальный макропроцессор. M4, например:
vhosts.conf.m4:

include(`rules.m4′)dnl
vhost(example.com, user)

Получаем конфиг:

m4 vhosts.conf.m4 > vhosts.conf

Где rules.m4:

define(`vhost’,`dnl
ServerName $1
ServerAlias www.$1
DocumentRoot /home/$2/$1/www
AllowOverride All
Options +Includes
SuexecUserGroup $2 $2
ScriptAlias /cgi-bin/ /home/$2/$1/cgi-bin/
CustomLog logs/$1/access_log combined
ErrorLog logs/$1/error_log
php_admin_value open_basedir «/home/$2/»
php_admin_value doc_root «/home/$2/$1»
php_admin_value upload_tmp_dir «/home/$2/$1/tmp»
php_value session.save_path «/home/$2/$1/tmp»
# Manual part for $1:
sinclude(`$1.custom’)dnl
‘)dnl

Комментарий от myhand — Декабрь 30, 2006 @ 7:46 pm

2myhand: и чем лучше-то?
как минимум добавляется одно телодвижение при добавлении хоста

Комментарий от auk — Январь 5, 2007 @ 9:33 pm

auk: Перегенерация конфига из m4-файла? — Несложно Makefile сделать который это автоматизирует, наряду с тестированием и перезагрузкой конфига.
m4 полноценный макропроцессор, условную логику позволяет, например.

Комментарий от myhand — Январь 7, 2007 @ 1:50 am

самой интересное — не работает рецептик….

Комментарий от хм не работает. — Январь 22, 2007 @ 12:54 pm

Вопрос:
Если
# Только один виртуальный хост для этого порта!
# Name-based виртуальные хосты не работают с SSL
то тогда как SSL организован у провайдера, т.е. на одном ip есть несколько сайтов (доменов второго и третьего уровня), каждый из которых работает через https?

Комментарий от user — Март 15, 2007 @ 2:00 pm

# Только один виртуальный хост для этого порта!
# Name-based виртуальные хосты не работают с SSL
ServerName www.foo.com
DocumentRoot /var/www/www.foo.com/htdocs
CustomLog /var/log/apache/www.foo.com-access.log combined
ErrorLog /var/log/apache/www.foo.com-error.log
SSLEngine On
Не пойму одного, везде пишется что SSL может быть только один на IP:PORT адресе, но у меня работает на 1 IP:PORT любое количество доменов, хоть указывать на один сертификат хоть создавать каждому свой сертификат.

Читайте также:  Настройка тепловой защиты асинхронного двигателя

Комментарий от Evgeniy — Июль 28, 2007 @ 3:23 pm

Немогу только динамические линки на сертификаты сделать что бы при добавлении удалении хоста Апача не передёргивать.

Комментарий от Evgeniy — Июль 28, 2007 @ 3:27 pm

А может кто знает как организовать динамически конфигурируемый виртуальный хостинг? Я слышал что это можно сделать при помощи mod_vhost_alias вот только не знаю как. Может кто знает?

Комментарий от Cast — Ноябрь 13, 2007 @ 10:38 pm

Блин спасибо БОЛЬШОЕ! Все получилось! Респект.
__________________
http://www.foursea.ru/

Комментарий от андрюха — Август 31, 2008 @ 12:02 am

Вот тут хорошо описано про настройку виртуальных хостов apache http://web-linux.ru/?p=56

Комментарий от Михаил — Октябрь 13, 2008 @ 10:48 am

Михаилу спасибо за линк.

Комментарий от Геннадий — Ноябрь 5, 2008 @ 1:56 pm

Так и не разобрался в этои теме до конца.

Комментарий от Феликс — Ноябрь 5, 2008 @ 1:57 pm

Ну уж нет я лучше заплачу разбирающемуся в этом человеку чем себе голову ломать.

Комментарий от Мартин — Ноябрь 8, 2008 @ 2:21 am

Люди помогите!
В общем настроил все, но выходит ошибка Bad request! Error 400!
но когда к нужному хосту в адресной строке добавляеш index то работает нормальнО! тоесть
xxx.mydomain.com выдает ошибку
xxx.mydomain.com/index.php все работает нормальнО!
Неподскажите что и где я не так сделал примерно!! Ответ на e-mail

Комментарий от Димко — Декабрь 21, 2008 @ 9:47 pm

Спасибо, оч помогло)))))))+1000000000 ))

Комментарий от Максим — Декабрь 26, 2008 @ 4:26 pm

ServerName mail.foo.com
DocumentRoot /var/www/mail.foo.com/htdocs
CustomLog /var/log/apache/mail.foo.com-access.log combined
ErrorLog /var/log/apache/mail.foo.com-error.log
так проще

Комментарий от Хичкок — Январь 19, 2009 @ 1:43 am

Не подскажите — как порты прослушивать ?

Комментарий от Georg — Январь 20, 2009 @ 1:05 am

Georg , есть специальный софт для таких дел

Комментарий от Альберт Эйнштейн — Январь 21, 2009 @ 2:30 am

Благодарю за подробный мануал по виртуальным хостам, будем попробовать

Комментарий от PostPortal — Январь 22, 2009 @ 1:36 am

Подскажите почему у меня при открытии виртуально хоста предлогает сохранить мне index.cgi. Видимо apache не хочет обрабатывать скрипты. Раньше этот сайт лежал не на виртуальном хосте и все работало, сейчас на виртуальном не хочет. Помогите…

Комментарий от kerno — Март 4, 2009 @ 6:04 am

Из всех примеров знал только об одном, особенно впечатлил метод настройки виртуального хоста с пользовательскими логами и идентификацией

Комментарий от Рудольф — Март 9, 2009 @ 10:47 pm

Довольно актуальная статья.

Комментарий от postnews — Март 14, 2009 @ 10:42 am

Я именно так и делал на своем серваке как расписал Alexey A. Ukhov

Комментарий от Gsm-сигнализация — Апрель 8, 2009 @ 9:54 pm

Источник

Adblock
detector