от Bondoff(10-12-2003)

рейтинг (20)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

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 >>