LINUX-BG   Адрес : http://www.linux-bg.org
Конфигуриране на виртуален хост
От: Bondoff
Публикувана на: 10-12-2003
Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=advices&key=357018484
Virtual Host примерни конфигурации
Основна конфигурация

Прост name-based vhosting

   * Съвместимост: Синтаксисът за настройка се поддържа от Apache 1.3.13.
   * Настройка: Да предположим, че сървърът, на който ще се направят виртуалните хостове  има домейн: server.domain.tld. Ще трябва да се направят два псевдонима (aliases)  www.domain.tld и www.sub.domain.tld за IP адресът на който е регистриран server.domain.tld.

     Конфигурация на сървъра:

   ...
   Port 80
   ServerName server.domain.tld

   NameVirtualHost *

   <VirtualHost *>
   DocumentRoot /www/domain
   ServerName www.domain.tld
   ...
   </VirtualHost>

   <VirtualHost *>
   DocumentRoot /www/subdomain
   ServerName www.sub.domain.tld
   ...
   </VirtualHost>


         Звездичката означава всички адреси. Както се вижда в примера www.domain.tld е основният хост, защото е първи в списъка. Този пример е полезен за частни мрежи, където няма нужда от официална регистрация на домейн. Разбира се виртуалните хостове ще са достъпни само за частната мрежа.

Малко по-сложен виртуален хост - name-based vhost

   * Вариант 1: Сървърната машина има само един IP адрес (111.22.33.44), който отговаря на server.domain.tld. Отново ще създадем два псевдонима за виртуални хостове, а именно www.domain.tld  и www.sub.domain.tld за адресът 111.22.33.44.

     Конфигурация на сървъра:

   ...
   Port 80
   ServerName server.domain.tld

   NameVirtualHost 111.22.33.44

   <VirtualHost 111.22.33.44>
   DocumentRoot /www/domain
   ServerName www.domain.tld
   ...
   </VirtualHost>

   <VirtualHost 111.22.33.44>
   DocumentRoot /www/subdomain
   ServerName www.sub.domain.tld
   ...
   </VirtualHost>


         В случая www.domain.tld отново е default или primary сървър.

   * Вариант 2: Сървърната машина има два IP адреса (111.22.33.44 и 111.22.33.55) които съответстват на имената server1.domain.tld и server2.domain.tld. Псевдонимът (alias) www.domain.tld трябва да се използва от сървъра, който също така трябва да прехваща всички неспецифицирани адреси. Ще конфигурираме виртуални хостове с псевдоними www.otherdomain.tld и друг виртуален хост с име www.sub.domain.tld, който ще прехваща всички заявки към хостове от вида *.sub.domain.tld. Адресът 111.22.33.55 ще бъде използван за виртуални хостове.

     Конфигурация на сървъра:

   ...
   Port 80
   ServerName www.domain.tld
   DocumentRoot /www/domain

   NameVirtualHost 111.22.33.55

   <VirtualHost 111.22.33.55>
   DocumentRoot /www/otherdomain
   ServerName www.otherdomain.tld
   ...
   </VirtualHost>

   <VirtualHost 111.22.33.55>
   DocumentRoot /www/subdomain
   ServerName www.sub.domain.tld
   ServerAlias *.sub.domain.tld
   ...
   </VirtualHost>


         Всички заявки към адрес, различен от 111.22.33.55, ще бъдат обслужвани от главния сървър. Заявките към  111.22.33.55, които идват с непознат хост или без хост-част  ще бъдат пренасочвани към www.otherdomain.tld.

   * Вариант 3: Сървъра има два IP адреса, но единият е областта на "частни" IP адреси (192.168.1.1 and 111.22.33.55). Тези от вас, които се занимават с администриране на мрежи, познават доста добре такива конфигурации, за останалите ще споменем, че това са сървъри, които играят роля на "шлюз" (gateway), между вътрешни, частни, мрежи и Интернет. Името на сървъра - server1.domain.tld от външни мрежи е достъпно през адресът 111.22.33.55, а от вътрешната мрежа - през адресът 192.168.1.1.

     Сървърът може да бъде конфигуриран да отговаря на заявки към един и същ виртуален хост както от външни адреси, така и от вътрешната мрежа.

     Конфигурация на сървъра:

   ...
   NameVirtualHost 192.168.1.1
   NameVirtualHost 111.22.33.55

   <VirtualHost 192.168.1.1 111.22.33.55>
   DocumentRoot /www/server1
   ServerName server1.domain.tld
   ServerAlias server1
   ...
   </VirtualHost>



   * Вариант 4: Да предположим, че имате регистриран един IP адрес, но за този адрес сте регистрирали два домейна. Освен това сте решили да използвате и различни портове за всеки от домейните ви. Това става лесно като в частта "NameVirtualHost IP address:port" дефинирате и порта. Обърнете внимание, че също така е необходимо да укажете порта и в частта <VirtualHost name:port> в противен случай, конфигурацията няма да работи.

     Конфигурация на сървъра:

   ...  
   NameVirtualHost 111.22.33.44:80
   NameVirtualHost 111.22.33.44:8080

   <VirtualHost 111.22.33.44:80>
   ServerName www.domain.tld
   DocumentRoot /www/domain-80
   </VirtualHost>

   <VirtualHost 111.22.33.44:8080>
   ServerName www.domain.tld
   DocumentRoot /www/domain-8080
   </VirtualHost>

   <VirtualHost 111.22.33.44:80>
   ServerName www.otherdomain.tld
   DocumentRoot /www/otherdomain-80
   </VirtualHost>

   <VirtualHost 111.22.33.44:8080>
   ServerName www.otherdomain.tld
   DocumentRoot /www/otherdomain-8080
   </VirtualHost>



IP-базирани виртуалени хостове

   * Вариант 1: Сървъра има два IP адреса (111.22.33.44 и 111.22.33.55), които съответстват на домейните server.domain.tld и www.otherdomain.tld. Искаме  www.domain.tld да бъде псевдоним за server.domain.tld.

     Конфигурация на сървъра:

   ...
   Port 80
   DocumentRoot /www/domain
   ServerName www.domain.tld

   <VirtualHost 111.22.33.55>
   DocumentRoot /www/otherdomain
   ServerName www.otherdomain.tld
   ...
   </VirtualHost>


         www.otherdomain.tld е достъпен през адресът 111.22.33.55, докато www.domain.tld може да бъде достигнат единствено през 111.22.33.44  (main server).

   * Вариант 2: Също както при вариант 1, но без псевдоним за главния сървър.

     Server configuration:

   ...
   Port 80
   ServerName server.domain.tld

   <VirtualHost 111.22.33.44>
   DocumentRoot /www/domain
   ServerName www.domain.tld
   ...
   </VirtualHost>

   <VirtualHost 111.22.33.55>
   DocumentRoot /www/otherdomain
   ServerName www.otherdomain.tld
   ...
   </VirtualHost>


         Сървъра не може да бъде достигнат пряко през нито един от виртуалните хостове, тъй като и двата IP адреса са запазени за тях. Достъпа до главния сървър може да стане единствено през localhost.

   * Вариант 3: Сървъра има два IP адреса (111.22.33.44 и 111.22.33.55), които отговарят на домейните server.domain.tld и www-cache.domain.tld. Хоста www.domain.tld е псевдоним за server.domain.tld и ще бъде главен сървър. www-cache.domain.tld ще бъде нашия прокси-кеш (proxy-cache), който ще слуша на порт 8080, докато уеб сървъра ще бъде достъпен през порт 80.

Конфигурация на сървъра:

   *

...
   Port 80
   Listen 111.22.33.44:80
   Listen 111.22.33.55:8080
   ServerName server.domain.tld

   <VirtualHost 111.22.33.44:80>
   DocumentRoot /www/domain
   ServerName www.domain.tld
   ...
   </VirtualHost>

   <VirtualHost 111.22.33.55:8080>
   ServerName www-cache.domain.tld
   ...
     <Directory proxy:>
     Order Deny,Allow
     Deny from all
     Allow from 111.22.33
     </Directory>
   </VirtualHost>


         Главния сървър никога няма да приеме заявка, тъй като всички IP адреси (без localhost) се използват от IP-базирани виртуални хостове. Уеб сървъра може да бъде достигнат от първият адрес през порт 80, а прокси-кеш сървъра - на вторият адрес през порт 8080.

Смесени name-/IP-базирани виртуални хостове

   * Настройка: Сървъра има три IP адреса (111.22.33.44, 111.22.33.55 и 111.22.33.66), на които са регистрирани съответно server.domain.tld, www.otherdomain1.tld и www.otherdomain2.tld. Адресът 111.22.33.44 ще бъде използван за  name-based виртуален хост, а останалите - за IP-based vhosts.

     Конфигурация на сървъра:

   ...
   Port 80
   ServerName server.domain.tld

   NameVirtualHost 111.22.33.44

   <VirtualHost 111.22.33.44>
   DocumentRoot /www/domain
   ServerName www.domain.tld
   ...
   </VirtualHost>

   <VirtualHost 111.22.33.44>
   DocumentRoot /www/subdomain1
   ServerName www.sub1.domain.tld
   ...
   </VirtualHost>

   <VirtualHost 111.22.33.44>
   DocumentRoot /www/subdomain2
   ServerName www.sub2.domain.tld
   ...
   </VirtualHost>

   <VirtualHost 111.22.33.55>
   DocumentRoot /www/otherdomain1
   ServerName www.otherdomain1.tld
   ...
   </VirtualHost>

   <VirtualHost 111.22.33.66>
   DocumentRoot /www/otherdomain2
   ServerName www.otherdomain2.tld
   ...
   </VirtualHost>    


Port-базиран виртуален хост

   * Настройка: Сървъра има един IP адрес (111.22.33.44), отговарящ на домейна www.domain.tld.

     Конфигурация на сървъра:

   ...
   Listen 80
   Listen 8080
   ServerName www.domain.tld
   DocumentRoot /www/domain

   <VirtualHost 111.22.33.44:8080>
   DocumentRoot /www/domain2
   ...
   </VirtualHost>


         Заявките към www.domain.tld на порт 80 ще бъдат приети от главния сървър (/www/domain). Заявките към www.domain.tld на порт 8080 ще бъдат пренасочени към виртуалният хост (/www/domain2).

Използване на  _default_ виртуален хост

   * Вариант 1: Възприема всяка заявка към всеки неуказан IP адрес и порт, т.е. адрес/порт комбинация, която не се използва за други виртуални хостове.

     Конфигурация на сървъра:

   ...
   <VirtualHost _default_:*>
   DocumentRoot /www/default
   ...
   </VirtualHost>


   * Вариант 2: Също както при вариант1, но сървъра ще слуша на няколко порта и ще използваме втори  _default_ виртуален хост на порт 80.

     Конфигурация на сървъра:

   ...
   <VirtualHost _default_:80>
   DocumentRoot /www/default80
   ...
   </VirtualHost>

   <VirtualHost _default_:*>
   DocumentRoot /www/default
   ...
   </VirtualHost>    


         Виртуалният хост по подразбиране (The default vhost) за порт 80 (който трябва да се вижда преди другите  _default_ хостове с  wildcard port) приема заявки, които не са към указан IP адрес. Главният сървър няма да отговаря на тези заявки.

   * Вариант 3: Искаме _default_ виртуален хост на порт 80, без допълнителни _default_ виртуални хостове.

     Конфигурация на сървъра:

   ...
   <VirtualHost _default_:80>
   DocumentRoot /www/default
   ...
   </VirtualHost>


         Заявка към неуказан адрес през порт 80 ще бъде пренасочена към _default_ хоста. Всички останали заявки към  неуказани адреси на други портове ще бъдат пренасочени към главния сървър.

Използване на директивата ServerPath

   * Настройка: Имаме сървър с конфигурирани два name-based виртуални хоста. С оглед да се достигне до правилният виртуален хост, клиентът подал заявката, трябва да подаде правилно хост-име. Старите уеб браузъри използващи   HTTP/1.0 клиенти не подават правилно "header" частта и Apache не може да разбере към кой точно виртуален хост да пренасочи заявката (и затова я пренасочва към първия виртуален хост). Този проблем се решава лесно като създадете  проста уеб-страница с пълният (и правилен) текст на линковете към съответните виртуални хостове.

     Конфигурация на сървъра:

   ...
   NameVirtualHost 111.22.33.44

   <VirtualHost 111.22.33.44>
   # primary vhost
   DocumentRoot /www/subdomain
   RewriteEngine On
   RewriteRule ^/.* /www/subdomain/index.html
   ...
   </VirtualHost>

   <VirtualHost 111.22.33.44>
   DocumentRoot /www/subdomain/sub1
   ServerName www.sub1.domain.tld
   ServerPath /sub1/
   RewriteEngine On
   RewriteRule ^(/sub1/.*) /www/subdomain$1
   ...
   </VirtualHost>

   <VirtualHost 111.22.33.44>
   DocumentRoot /www/subdomain/sub2
   ServerName www.sub2.domain.tld
   ServerPath /sub2/
   RewriteEngine On
   RewriteRule ^(/sub2/.*) /www/subdomain$1
   ...
   </VirtualHost>


         С директивата  ServerPath  се гарантира, че всички заявки от типа http://www.sub1.domain.tld/sub1/ ще бъдат пренасочвани към виртуалният хост sub1.
         Заявка към http://www.sub1.domain.tld/ ще бъде пренасочена към sub1 единствено ако клиента е подал правилно частта "Host: header". Ако не е подадена правилно, тя ще бъде пренасочена към създадената от вас уеб страница /www/subdomain/index.html.
         Моля отбележете, следната особеност: Заявка към  http://www.sub2.domain.tld/sub1/ също ще бъде пренасочена към виртуалният хост sub1 ако клиента въобще не подаде частта  "Host: header".
         Директивата RewriteRule се използва за да може клиентите които подават коректни заявки, да използват  и двата URL варианта, т.е. със или без URL префикс.

<< Ограничаване на трафика | Използване на интернет и мултимедийни клавиатури под Linux >>

Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук, но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора, както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.

All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
Linux is copyright by Linus Torvalds.
© Линукс за българи ЕООД 2007
© Slavei Karadjov 1999 - 2006

All rights reserved.

Изпълнението отне: 0 wallclock secs ( 0.17 usr + 0.03 sys = 0.20 CPU)