Меню

Администрирование. Размещение нескольких веб-сайтов IIS на одном IP адресе

При установке сервера IIS (Internet Information Services) в Windows по умолчанию создается пустой веб-сайт “Default Web Site”, который слушает на стандартном веб порту – TCP 80. В терминах IIS это означает, что выполнена привязка этого сайта (Binding) к порту 80. Чтобы открыть этот сайт, достаточно в браузере набрать имя сервера IIS (“http://web-srv1”) или его IP адрес (“http://10.10.0.88”). Один веб сервер IIS может обслуживать десятки и сотни сайтов, и вы можете запустить на нем несколько веб-сайтов, которые слушают и отвечают на одном и том же TCP порту (80, 443 или любом другом). Однако из интерфейса IIS Manager, совсем не очевидно, что можно запустить второй сайт на этом же хосте без привязки его к другому порту (например, 8080). В этой статье мы разберёмся, как на одном сервере IIS запустить несколько сайтов, привязать их к одному и тому же порту и IP адресу, или разным IP адресам.

Содержание:
• ServerBindings — привязка сайтов в IIS
• Добавляем новое имя сайта в Host Header в IIS
• Настройка нескольких сайтов в IIS на разных IP адресах
• Управление привязкой сайтов IIS с помощью PowerShell

ServerBindings — привязка сайтов в IIS
На одном веб сервере IIS можно запустить множество сайтов. Однако, чтобы IIS мог корректно распределять HTTP запросы, каждый сайт должен идентифицироваться уникальным значением. Для веб-сайта IIS оно формируется из трех атрибутов, комбинация которых для каждого сайта должна быть уникальной. Это:
• номер TCP порта
• IP адрес
• имя узла (host header)
Информация о запущенных сайтах хранится в атрибуте ServerBindings метабазы IIS в формате IP:Port:Hostname. Поэтому, что запустить несколько сайтов на одном порту и IP адресе, нужно использовать уникальный Host header. Что это такое? Host header – это часть HTTP запроса к серверу, который отправляет клиент, указывая к какому конкретно сайту он хочет обратиться. Соответственно, данный host header должен быть указан на стороне веб сервера, а в DNS содержаться корректная запись, по которой можно определить соответствие между именем хоста и IP адресом веб-сервера.
Например, наш тестовый веб сайт IIS уже на 80 порту. Нам нужно добавить второй сайт на этом же порту.
В консоли управления IIS создадим второй сайт (Add Website). С именем TestSite , файлы которого будут храниться в каталоге c:\inetpub\TestSite (имя хоста пока не указываем).

После того, как вы нажмете “OK”, появится предупреждение, в котором говорится, что вы не можете использовать привязку *:80 для двух сайтов, т.е. одновременно может работать только один из них.

Add Website
The binding '*:80:' is assigned to another site. If you assign the same binding to this site, you will only be able to start one of the sites. Are you sure that you want to add this duplicate binding?

Согласимся с этим предупреждением. Итак, у нас появился второй сайт, также привязанный к 80 порту, но запустить его без остановки первого сайта нельзя.

Добавляем новое имя сайта в Host Header в IIS
Щелкните ПКМ по сайту TestSite и выберите пункт меню Edit Bindings. Выберите нужную привязку и нажмите Edit.
В поле Host Name укажите уникальное имя хоста, к которому должны обращаться пользователи, например, TestSite.

Настроить привязку можно и из командной строки. В данном примере для IIS 7 и выше команда установки привязки будет выглядеть так:

C:\Windows\System32\inetsrv\appcmd.exe set site /site.name:testsite2 /+bindings.[protocol='http',bindingInformation='*:80:testsite2']

Теперь можно запустить и второй веб сайт.

Все, что осталось сделать – добавить в DNS алиас для сервера (запись типа A или CNAME), указывающую на IP адрес веб-сервера или его имя.
Если вы используйте домен Active Direcroty, нужно создать DNS записи на контроллере домена.
Создать CNAME запись для имени TestSite можно с помощью консоли DNS (dnsmgmt.msc), в качестве FQDN target host указать доменное имя вашего IIS сервера.

Создать такую DNS запись можно с помощью PowerShell :

Add-DnsServerResourceRecordCName -HostNameAlias msk-srv01.test.com -Name testsite2 -ZoneName test.com

Теперь в браузере попробуйте открыть сайт http://testsite2. Он должен успешно открыться.

Еще несколько полезных моментов, которые стоит упомянуть.
В том случае, если у вас используется локальный сервер IIS, сопоставление имен сайтов с IP адресом сервера выполняется через локальный файл hosts ( C:\Windows\system32\drivers\etc\hosts ).
Настройки привязок хранятся в конфигурационном файле IIS ( C:\Windows\System32\inetsrv\config\applicationHost.config ) в секции <sites>.
В нашем примере эта секция содержит такие данные:

<sites>
<site name="Site1" id="1" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:" />
</bindings>
</site>
<site name="TestSite2" id="2" serverAutoStart="true">
<application path="/" applicationPool="TestSite2">
<virtualDirectory path="/" physicalPath="C:\inetpub\site2" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:testsite2" />
</bindings>
</site>
<siteDefaults>
<logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" />
<traceFailedRequestsLogging directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" />
</siteDefaults>
<applicationDefaults applicationPool="DefaultAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>

По аналогии вы можете разместить и запустить на одном порту 80 или 443 веб-сервера IIS несколько десятков сайтов.

Настройка нескольких сайтов в IIS на разных IP адресах
Теперь попробуем запустить на веб сервере IIS два сайта на разных IP адресах. В первую очередь нужно добавить на Windows Server отдельный VLAN интерфейс или просто назначить на сетевое подключение дополнительный IP адрес (алиас).
В этом примере у сервера основной IP адрес 192.168.13.100, и я добавлю на этот же сетевой адаптер дополнительный IP алиас 192.168.13.101:

Get-NetIPAddress | ft IPAddress, InterfaceAlias, SkipAsSource
New-NetIPAddress –IPAddress 192.168.13.101 –PrefixLength 24 –InterfaceAlias “Ethernet” –SkipAsSource $True


Теперь на DNS сервере нужно создать A запись для нового сайта (сразу создадим PTR запись в обратной зоне):

Add-DnsServerResourceRecordA -Name NewSite3 -IPv4Address 192.168.13.101 -ZoneName test.com -TimeToLive 01:00:00 –CreatePtr

Осталось открыть настройки Site Binding и привязать сайт к новому IP адресу.

Управление привязкой сайтов IIS с помощью PowerShell
Вы можете управлять привязкой (биндингом) сайтов на сервере IIS с помощью PowerShell. Для этого используется модуль WebAdministration:

Import-Module WebAdministration

Вывести информацию о всех имеющихся сайтах и привязках:

Get-IISSite


Либо о конкретном сайте:

(Get-Website -Name NewSite3).bindings.Collection
protocol bindingInformation sslFlags
-------- ------------------ --------
http 192.168.13.101:80:NewSite3 0

Чтобы изменить привязку этого сайта (можно сменить IP адреса, порт или имя), выполните:

Set-WebBinding -Name NewSite3 -BindingInformation "192.168.13.101:80:NewSite3" -PropertyName 'Port' -Value '81'
Set-WebBinding -Name NewSite3 -BindingInformation "192.168.13.101:81:NewSite3" -PropertyName 'IPAddress' -Value '192.168.13.100'

Для добавления новой привязки к сайту, выполните:

New-IISSiteBinding -Name NewSite3 -BindingInformation "*:8080:" -Protocol http

Для удаления привязки:

Remove-IISSiteBinding -Name NewSite3 -BindingInformation "*:9090:"

Таким образом вы можете запустить на веб сервере IIS несколько сайтов как на разных IP адресах, так и на одном и том же IP адресе и TCP порту.

На этом Все!!! Всем Удачи!!!