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