Виртуальный хостинг


Работа сайтов на хостинге от Хостпро обсуждается на этой странице и можно свой отзыв оставить.

Виртуальный хостинг подразумевает поддержку нескольких веб-сайтов одним веб-сервером. Сервер сконфигурирован для обслуживания веб-запросов к каждому из этих доменов и возвращает пользователям соответствующие страницы. Многим компаниям нужен очень маленький веб-сайт, содержащий лишь несколько информационных страниц и, возможно, один-два CGI-сценария. Именно здесь замечательно подойдут виртуальные хосты. Мои серверы FreeBSD без особых усилий обслуживали тысячи маленьких доменов, при этом системная нагрузка не превышала 0,2. Учитывая, что каждый владелец такого сайта платит $19,95 в месяц за обслуживание пары десятков посетителей в день, можно быстро заработать хорошие деньги на недорогих аппаратных средствах.

Типичный камень преткновения в понимании виртуальных хостов — распространенное заблуждение, что волшебное слово www в URL указывает на веб-сайт. На самом деле, вводя, например, URL http://www.freebsd.com, вы предписываете веб-броузеру найти машину с именем www.freebsd.com, а затем подключиться к порту 80 и посмотреть, что веб-сервер сможет предложить. Сочетание символов www было придумано системными администраторами как сокращение от «сервер с кусочком Сети (world wide web) на нем». Если взглянуть немного повнимательнее, можно встретить веб-сайты, размещенные на нескольких машинах с разными именами. В случае виртуального хостинга несколько имен хостов относятся к одной и той же машине. Сервер должен различать запросы к различным доменам, а затем предоставлять соответствующие страницы. Чтобы включить функцию обслуживания виртуальных хостов, нужно раскомментировать соответствующую строку с инструкцией Include в файле httpd.conf.

Конфигурирование виртуальных хостов

Поскольку единственный сервер Apache в состоянии обслуживать тысячи виртуальных хостов, я предлагаю хранить конфигурацию каждого такого хоста в отдельном файле в каталоге Includes. Если имя файла имеет расширение .conf, Apache автоматически подключает конфигурацию при последующих перезагрузках. Кроме того, рекомендую присвоить файлу имя, содержащее имя домена, который он будет обслуживать. В результате у вас могут получиться такие имена файлов, как www.customer1.com.conf, www.customer2.com.conf и т. д. По сравнению с монолитной конфигурацией, когда все параметры настройки сосредоточены в одном файле, такой подход позволяет упростить поиск неполадок на сайте.

Сервер Apache поддерживает два способа определения виртуальных хостов: по имени и по IP-адресу. При определении виртуальных хостов по имени предполагается, что клиент обращается к веб-сайту по его имени. Все броузеры, начиная с Netscape 3 и IE 4, поддерживают такую возможность. Определение виртуальных хостов по имени будет правильным выбором практически в любом случае. Определение виртуальных хостов по IP-адресу означает, что каждому отдельному IP-адресу соответствует свой виртуальный хост. Оно необходимо только в том случае, когда для работы виртуального хоста требуется сертификат SSL. Оба способа можно применять на одном и том же сервере.

Ниже приведен пример определения виртуального сервера по имени для домена absolutefreebsd.com. Его конфигурационный файл: /usr/local/etc/apache22/Includes/absolute freebsd.com.conf.

Первое, что мы замечаем, — это теги <VirtualHost> и </VirtualHost>. Все, что находится между этими тегами, является определением единственного виртуального хоста. Запись *:80 говорит о том, что запросы к этому веб-сайту могут поступать на порт 80 по любому IP-адресу.

Как и в случае с основным сервером, для виртуального хоста необходимо определить параметры ServerAdmin (1) и DocumentRoot (2); благодаря последнему Apache сможет найти документы, составляющие информационное наполнение веб-сайта. Кроме того, для веб-сервера нужно определить параметры ErrorLog (5) и CustomLog (6). (Можно завести единый протокол ошибок для всех виртуальных веб-сайтов, но потом в нем будет сложнее искать нужную информацию.)

Пожалуй, самое интересное здесь — это параметры ServerName и ServerAlias. Имя сервера (3)absolutefreebsd.com. Параметр ServerAlias (4) определяет второе имя, www.absolutefreebsd.com. В результате Apache будет выдавать одно и то же содержимое для любого из этих имен. Если кто-то поленился ввести часть www в имени сайта, это не значит, что ему следует отказать в получении страницы.

Виртуальный хост на базе IP-адреса задается практически так же, как на базе имени, за исключением содержимого тега <VirtualHost>. В этом случае вместо комбинации *:80, указывающей, что данный хост будет принимать запросы на любой из IP-адресов, относящихся к машине, следует определить единственный IP-адрес:

<VirtualHost 192.168.1.5:80>
    ServerAdmin webmaster@AbsoluteFreeBSD.com
...

Этот виртуальный хост будет принимать запросы, поступающие на IP-адрес 192.168.1.5. Создавать виртуальный хост на базе IP-адреса необходимо, только если сайт использует протокол HTTPS, для которого должен использоваться единственный, уникальный IP-адрес. Читайте раздел «Веб-сайты HTTPS» ниже в этой главе.

Определение виртуального хоста должно содержать все необходимое для обеспечения работы веб-сайта. Например, сервер Nagios, для которого ранее в этой главе я настраивал аутентификацию через сервер Radius, фактически является виртуальным хостом. Поэтому конфигурация Radius должна находиться в конфигурационном файле виртуального хоста, а не в httpd.conf.

Хост по умолчанию

Если вы используете виртуальные хосты, самый первый хост в конфигурации служит веб-сайтом по умолчанию. Обязательно проверьте, чтобы значения параметров DocumentRoot и ErrorLog этого хоста совпадали со значениями сайта по умолчанию, определенными в httpd.conf. Кроме того, рекомендую удалить пример определения виртуального хоста на базе имени из файла extra/httpd-vhosts.conf.

Тонкая настройка виртуальных хостов

Обеспечив работу виртуальных хостов с минимальной конфигурацией, можно провести дополнительную настройку. Здесь мы обсудим параметры виртуальных хостов, которые подходят для виртуальных хостов обоих типов.

Номера портов

Различные сайты можно обслуживать на разных портах TCP/IP. Вы могли видеть это раньше — когда имя хоста в URL завершалось двоеточием и числом. Например, если Apache прослушивает порты 80 и 8080, на каждом из них можно разместить различные виртуальные хосты, если добавить номера портов к IP-адресам в директиве VirtualHost.

Ниже приведен пример конфигурации, создающей два различных сайта на разных портах. На деле мне пришлось бы дополнить эту конфигурацию инструкциями протоколирования и информацией об администраторе, а в примере я ее упростил:

<VirtualHost *:80>
    DocumentRoot /var/www/www.absolutefreebsd.com
    ServerName www.absolutefreebsd.com
</VirtualHost>
<VirtualHost *:8080>
    DocumentRoot /var/www/data.absolutefreebsd.com
    ServerName data.absolutefreebsd.com
</VirtualHost>

Вы наверняка заметили, что содержимое обоих сайтов находится в одном и том же каталоге, с тем же успехом можно было бы настроить оба сайта на прослушивание единственного порта с номером 80. Это совершенно не важно, если помогает решить вашу задачу.

Options и AllowOverride

По умолчанию виртуальные хосты наследуют значения Options и AllowOverride из корневого каталога Apache. Значения, заданные по умолчанию, являются весьма ограничивающими, запрещая доступ откуда угодно. Однако вы можете переопределить поведение по умолчанию, поместив инструкции Options и AllowOverride в определение виртуального хоста. Здесь можно использовать любые параметры, допустимые в httpd.conf. Это позволяет по-разному настраивать отдельные сайты. Например, на одном виртуальном сайте можно разрешить вставки на стороне сервера, запретив их на другом. В следующем определении виртуального хоста значение Options переопределяет настройки сервера по умолчанию и назначает для каталога DocumentRoot специальные привилегии.

<VirtualHost *:80>
    DocumentRoot /var/www/absolutefreebsd.com
    ServerName absolutefreebsd.com
    Options IncludesNOEXEC
</VirtualHost>
<Directory /var/www/absolutefreebsd.com>
    AllowOverride AuthConfig
</Directory>

Все это делает виртуальный хост почти таким же гибким, как выделенный сервер, разумеется, пока ваши клиенты не пожелают установить собственные модули Apache. В этом случае вы можете продать им сервер в клетке и позволить устанавливать любые модули.

Комментарии запрещены.