от Bondoff(10-12-2003)
рейтинг (20)
[ добре ]
[ зле ]
Вариант за отпечатване
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 >>
|