2. vhost
Они могут указывать на весь сервер или на его часть -- подкаталоги.
Рассмотрим первый тип - 'path'. Предположим, что есть основной сервер
www.host.ru. Нам нужно создать синоним www.newhost.ru , который должен
указывать на www.host.ru/new/. Нужный тип синонима - 'path'.
Запрос пользователя www.newhost.ru будет преобразован в www.host.ru/new/, и
в таком виде он будет направлен к Вашему серверу. Соответственно, значение
переменной окружения HTTP_HOST при обращении к синониму соответствует
имени родительского сервера, то есть, в нашем случае это будет www.host.ru.
Иными словами, на родительском сервере www.host.ru невозможно отличить
запрос к синониму http://www.newhost.ru от запроса к основному серверу с
указанием каталога http://www.host.ru/new/
Синонимы типа vhost
Использование синонимов типа 'vhost' доступно для тарифов "Рабочий",
"Деловой" и "Профессионал".
На тарифах "Рабочий" и "Деловой" синоним типа 'vhost' очень похож на синоним
типа 'path'. Отличие по сути только одно: значение переменной окружения
HTTP_HOST при обращении к синониму типа 'vhost' соответствует тому имени, к
которому происходит обращение, что позволяет пользователям в своих скриптах
определять, по какому имени посетители запрашивают страницы сайта. Если,
например, http://www.newhost.ru является синонимом для
http://www.host.ru/new/, то при обращении к http://www.newhost.ru в
HTTP_HOST будет "www.newhost.ru", при обращении к http://www.host.ru/new/ -
соответственно, "www.host.ru".
Обратите внимание, что обращения к http://www.domain и http://domain не
разделяются. Например, и при обращении к http://www.newhost.ru, и к
http://newhost.ru в HTTP_HOST будет "www.newhost.ru".
Вы можете
самостоятельно выбирать тип синонима между 'path' и 'vhost'. Зайдите на
Сервер Статистики под управляющим логином, выберите соответствующую услугу
("Synonym", "Alias", "SubDomain"), а затем - ссылку "Управление услугой".
Мы рекомендуем использовать синонимы типа 'vhost'.
На тарифе "Профессионал" с помощью синонимов типа 'vhost' можно создавать
полноценные www-серверы. Об этой возможности можно прочитать ниже.
Особенность trailing slash redirect
Здесь может быть особый случай, когда пользователь набирает в браузере
http://newhost.ru/dir и попадает на http://host.ru/new/dir/, тем
самым "обнаруживая" родительский сервер. Это особенность работы
сервера Apache, называемая trailing slash
redirect - если в конце адреса не был указан символ '/' (slash), то
apache сделает "переадресацию" (external redirect) на основное имя сервера.
Если по какой-либо причине это нежелательно, то при помощи использования
модуля mod_rewrite можно изменить его на нужный редирект. Для этого в
каталоге основного сервера, куда указывает www-alias newhost.ru, создается
файл
.htaccess следующего содержанием:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !^/new$
RewriteRule ^(.+[^/])$ http://newhost.ru/$1/ [R]
RewriteBase /new/
Кэширование синонимов
Данные пользователей кэшируются на акселераторах хостинга, позволяя таким
образом веб-серверам работать быстрее. Поскольку при кэшировании запроса
акселератор учитывает значение http-заголовка Host, то синонимы с типом
'path' кэшируются как родительский сервер. То есть, документ
http://www.newhost.ru/dir/ будет закэширован как http://www.host.ru/new/dir.
Подробнее о кэшировании можно прочитать здесь. Возможно, это Вам никогда не
понадобится, но если возникнут сложности или вопросы, это объяснение будет
полезным.
Использование синонима типа 'vhost' на тарифе "Профессионал"
На тарифе "Профессионал", используя синонимы типа 'vhost', можно создавать
полноценные www-серверы. Это потребует внесения некоторых изменений в файл
конфигурации веб-сервера Apache httpd.conf, что подразумевает наличие
базовых знаний по управлению сервером Apache и некоторых навыков работы в
unix-shell. Если Вы являетесь владельцем сервера, работающего по тарифу
"Профессионал", Вы можете самостоятельно выбирать тип синонима между 'path'
и 'vhost'. Зайдите на Сервер Статистики под Управляющим логином, выберите
соответствующую услугу ("Synonym", "Alias", "SubDomain"), а затем - ссылку
"Управление услугой".
Предположим, что есть основной сервер www.host.ru, расположенный в каталоге
/bhome/part2/01/host/www/ . Нам нужно создать алиас newhost.ru , который
должен указывать на каталог /bhome/part2/01/host/new/, тип синонима -
'vhost'. При этом для сервера и для его алиаса создадим свои каталоги для
исполнения www-скриптов: соответственно, host.ru --
/bhome/part2/01/host/vcgi/ , а newhost.ru --
/bhome/part2/01/host/newvcgi/ .
Дописываем/исправляем в файле httpd.conf следующее:
# эта строка обязательно должна присутствовать
NameVirtualHost *
# сначала определим родительский сервер как virthost
<VirtualHost *>
ServerName www.host.ru
ServerAlias host.ru
DocumentRoot /bhome/part2/01/host/www/
<Directory /bhome/part2/01/host/www>
Options Indexes FollowSymLinks +Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
DirectoryIndex index.htm index.html index.php index.shtml
AccessFileName .htaccess
# определяем каталог для исполняемых скриптов
ScriptAlias /cgi-bin/ /bhome/part2/01/host/vcgi/
<Directory /bhome/part2/01/host/vcgi>
AllowOverride None
Options ExecCGI FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
# определяем синоним(ы)
<VirtualHost *>
ServerName www.newhost.ru
ServerAlias newhost.ru
DocumentRoot /bhome/part2/01/host/new/
<Directory /bhome/part2/01/host/new>
Options Indexes FollowSymLinks +Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
DirectoryIndex index.htm index.html index.php index.shtml
AccessFileName .htaccess
# определяем каталог для исполняемых скриптов
ScriptAlias /cgi-bin/ /bhome/part2/01/host/newvcgi/
<Directory /bhome/part2/01/host/newvcgi>
AllowOverride None
Options ExecCGI FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Обратите внимание: должны быть описаны как родительский сервер, так
и синоним.
Кроме того, синонимы типа 'vhost' обладают еще одной особенностью: значение
"DocumentRoot", заданное в конфигурационном файле веб-сервера, и параметр
"Путь", указанный на сервере статистики в разделе "Управление услугой",
"складываются". То есть при использовании описанной выше конфигурации, если
указать "Путь" - "test", то обращения к www.newhost.ru будут попадать в
/bhome/part2/01/host/new/test. Именно поэтому для синонимов типа 'vhost'
значение "Путь" следует оставлять пустым.
Можно также добавлять различные директивы внутрь соответствующих секций. К
примеру, можно задать отдельный лог для ошибок и т.п.
Запрос пользователя к www.newhost.ru будет передан серверу, соответственно,
переменные окружения Host: в запросе и HTTP_HOST будут указывать на значение
newhost.ru, поэтому синонимы типа 'vhost' кэшируются независимо от
родительского сервера.
Существующий механизм принудительного сброса закэшированных в акселераторах
хостинга данных не предусматривает наличия синонимов. Для синонимов типа
'path' это не создает проблем, а в случае 'vhost' необходимо управлять
кэшированием при помощи стандартных
для хостинга механизмов, таких как выставление заголовков Expires,
Last-Modified, используя модуль mod_expires.