Раньше компьютер с системой UNIX обычно служил сервером для одного веб-узла (например, acme.com). По мере роста популярности сети веб, практически каждый пользователь обзавелся собственным веб-узлом, и, как грибы после дождя, стали появ ляться тысячи новых компаний, занимающихся веб-хостингом.
Основные конфигурации интерфейса описаны в главе 14.
Провайдеры быстро осознали, что можно добиться существенной экономии средств и ресурсов, если на одном сервере размещать несколько узлов. Это позволило управлять группой узлов, таких как acme.com, ajах.com, toadranch.com и многие другие, ис пользуя одно и то же аппаратное обеспечение. На практике такой подход реализуется с помощью виртуальных интерфейсов.
Идея, лежащая в основе виртуальных интерфейсов, весьма проста: одиночный ком пьютер обслуживает больше IP-адресов, чем позволяют его физические сетевые интер фейсы. Каждый из “виртуальных” сетевых интерфейсов может иметь доменное имя, под которым он известен пользователям Интернета. Это позволяет единственному серверу обслуживать сотни веб-узлов.
Виртуальные интерфейсы позволяют демону идентифицировать соединения не толь ко по номеру порта назначения (например, порта 80 для HTTP), но и по целевому IP- адресу. В настоящее время виртуальные интерфейсы получили широкое распростране ние и оказались полезными не только для веб-хостинга.
Протокол HTTP 1.1 реализует функциональные возможности, подобные виртуаль ным интерфейсам (официально это называется “виртуальные интерфейсы, не имеющие IP-адреса”), устраняя потребность в назначении уникальных IP-адресов веб-серверам или в конфигурировании специального интерфейса на уровне операционной системы. Этот подход позволяет совместно использовать IP-адреса, что особенно полезно, когда один сервер содержит сотни или тысячи начальных страниц (например, в случае уни верситетских веб-узлов).
Однако такой подход нельзя назвать практичным для коммерческих узлов, посколь ку уменьшается степень их масштабируемости (приходится изменять IP-адрес при пере мещении узла на другой сервер) и возникает угроза безопасности системы (если доступ к узлу фильтруется брандмауэром на основе IP-адресов). Кроме того, виртуальные узлы,

Глава 23. Веб-хостинг 1013
основанные на именах, требуют, чтобы браузер поддерживал протокол SSL.3 Видимо, из-за этого ограничения настоящие виртуальные интерфейсы будут применяться еще долго.
Конфигурирование виртуальных интерфейсов
Настройка виртуального интерфейса проходит в два этапа. Сначала требуется соз дать виртуальный интерфейс на уровне TCP/IP. Как именно, зависит от версий системы UNIX; инструкции для разных версий системы UNIX приводятся ниже. На втором эта пе необходимо сообщить серверу Apache об имеющихся виртуальных интерфейсах. Этот этап также описан ниже.
Виртуальные интерфейсы в системе Linux
Виртуальные интерфейсы Linux обозначаются в формате интерфейс:экземпляр. Например, если интерфейс Ethernet называется eth0, то связанные с ним виртуальные интерфейсы именуются eth0:0, eth0:1 и т.д. Все интерфейсы конфигурируются с по мощью команды ifconfig. Например, команда
$ sudo ifconfig eth0:0 128.138.243.150 netmask 255.255.255.192 up
настраивает интерфейс eth0:0 и закрепляет за ним адрес в сети 128.138.243.128/26. Для того чтобы назначенные виртуальные адреса стали постоянными, необходимо мо дифицировать сценарии запуска системы.
В системе Red Hat требуется для каждого виртуального интерфейса создать отдельный файл в каталоге /etc/sysconfig/network-scripts. Например, файл ifcfg-eth0:0, соответствующий приведенной выше команде ifconfig, может содержать такие строки.
DEVICE=eth0:0
IPADDR=128.138.243.150
NETMASK=255.255.255.192
NETWORK=128.138.243.128
BROADCAST=128.138.243.191
ONBOOT=yes
Подход, принятый в системе Ubuntu, аналогичен подходу, используемому в си стеме Red Hat, за исключением того, что определения интерфейсов должны содержаться в файле /etc/network/interfaces. Записи, соответствующие ин терфейсу eth0:0, в нашем примере должны выглядеть следующим образом.
Iface eth0:0 inet static
address 128.138.243.150
netmask 255.255.255.192
broadcast 128.138.243.191
В системе SuSE можно создать виртуальные интерфейсы либо с помощью программы YaST, либо путем редактирования интерфейсных файлов. Для ис пользования программы YAST сначала на вкладке Global Options раздела Network Settings выберите команду Traditional method with ifup.
3 Относительно новая функциональная возможность Server Name Indication (SNI) позволяет использовать протокол SSL с виртуальными узлами, но старые браузеры этого делать не могут.
1014 Часть II. Работа в сети
В системе SUSE IP-адреса каждого интерфейса конфигурируются в одном файле. Для редактирования конфигурации поищите в каталоге /etc/sysconfig/network файлы, имена которых начинаются словами ifcfg-имя_интерфейса.
Например, в показанном ниже файле определяются интерфейсы eth0 и eth0:0.
IPADDR_1=128.138.243.149
NETMASK_1=255.255.255.192
STARTMODE_1="auto"
LABEL_1=0
 IPADDR_2=128.138.243.150
NETMASK_2=255.255.255.192
STARTMODE_2="autо"
LABEL_2=1
Суффиксы, следующие за именами IPADDR и NETMASK (в данном случае _1 и _2), не обязательно должны быть представлены числами, но для согласованности такое со глашение является вполне приемлемым. Для того чтобы виртуальные интерфейсы рас познавались, необходимо отредактировать файл /etc/sysconfig/network/config и установить параметр NETWORKMANAGER="no".
Виртуальные интерфейсы в системе Solaris
Система Solaris поддерживает виртуальные интерфейсы (“вспомогательные ин терфейсы”) посредством концепции физического интерфейса и логического модуля. Например, если hme0 — это имя физического интерфейса, то hme0:1, hme0:2 и так далее — это имена соответствующих виртуальных интерфейсов. По умолчанию с каж дым физическим интерфейсом может быть связано до 256 виртуальных сущностей. Если вы хотите изменить это ограничение, используя команду ndd, измените параметр ip_ addrs_per_if (описание команды ndd см. в разделе 14.13).
Для конфигурирования виртуального интерфейса просто примените команду ifconfig к одному из виртуальных имен. (Соответствующий физический интерфейс в этот момент уже должен быть “подключен”.) В большинстве случаев систему настраи вают так, чтобы команда ifconfig применялась к виртуальным интерфейсам во время загрузки.
Рассмотрим пример, в котором компьютер под управлением системы Solaris имеет адрес в пространстве частных адресов во внутренней частной виртуальной сети (VPN) и внешний адрес — в Интернете, причем оба адреса связаны с одним и тем же физиче ским устройством hme0. Для того чтобы эти интерфейсы автоматически конфигуриро вались во время загрузки, администратор должен отредактировать два файла имен узлов: /etc/hostname.hme0 и /etc/hostname.hme0:1.
$ ls -l /etc/host*
-rw-r--r-- 1 root 10 Nov 4 10:19 /etc/hostname.hme0 -rw-r--r-- 1 root 16 Dec 21 19:34 /etc/hostname.hme0:1
Файлы имен узлов могут содержат либо имена узлов из файла /etc/hosts либо IP- адреса. В данном случае администратор использовал каждую из этих возможностей.
В системе HP-UX все виртуальные интерфейсы можно добавлять с помощью коман ды ifconfig. Ее синтаксис очень похож на синтаксис, используемый в системе Solaris. Например, для того чтобы добавить первый интерфейс, следует выполнить такую ко манду.
$ sudo ifconfig lan0:1 192.168.69.1 up Виртуальные интерфейсы системы AIX
В системе AIX, для того чтобы добавить дополнительный IP-адрес для интерфейса, можно создать “псевдоним”. Например, для того чтобы добавить 192.168.1.3 как вирту альный IP-адрес интерфейса en0, можно использовать команду ifconfig.
$ sudo ifconfig en0 192.168.1.3 netmask 255.255.255.0 alias
Однако этот псевдоним является временным. Для того чтобы создать постоянный виртуальный IP-адрес, следует выполнить команду chdev.
$ sudo chdev -l en0 -a alias4=192.168.1.3,255.255.255.0
Передача серверу Apache информации о виртуальном интерфейсе
После создания виртуальных интерфейсов с помощью команды ifconfig требуется сообщить серверу Apache о том, какие документы должны обрабатываться при попытке подключения клиента к каждому интерфейсу (IP-адресу). Это можно сделать с помощью директивы VirtualHost файла httpd.conf. Каждому сконфигурированному виртуаль ному интерфейсу должна соответствовать одна такая директива. Приведем пример.
После подключения клиента к виртуальному узлу 128.138.243.150 будут обрабаты ваться документы из каталога /var/www/htdocs/company. Для настройки параме тров виртуального узла в раздел VirtualHost может включаться почти любая дирек тива веб-сервера Apache. Относительные пути к каталогам, включая пути для директив DocumentRoot, ErrorLog и CustomLog, интерпретируются в контексте ServerRoot.
Если виртуальные узлы имеют имена, то множественные имена в системе DNS ссы лаются на один и тот же IP-адрес. Конфигурация веб-сервера Apache остается прежней,
1016 Часть II. Работа в сети
но необходимо задать основной IP-адрес, который веб-сервер Apache должен прослуши вать в ожидании входящих запросов к именованному виртуальному узлу, и не указывать IP-адрес в разделе VirtualHost.
В этой конфигурации веб-сервер Apache ищет заголовки HTTP, чтобы определить требуемый сайт. Сервер прослушивает запросы к сайту www.company.com на его основ ном IР-адресе 128.138.243.150.