Размещение нескольких веб-сайтов 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 адресам.

управление привязкой сайтов в IIS

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 (имя хоста пока не указываем).

добавить новый сайт в iis

После того, как вы нажмете “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?

The binding '*:80:' is assigned to another site

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

несколько сайтов в iis

Добавляем новое имя сайта в Host Header в IIS

Щелкните ПКМ по сайту TestSite и выберите пункт меню Edit Bindings. Выберите нужную привязку и нажмите Edit.

В поле Host Name укажите уникальное имя хоста, к которому должны обращаться пользователи, например, TestSite.

указать новый hostname в iis site bindings

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

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

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

запуск второго сайта IIS на том же порту

Все, что осталось сделать – добавить в DNS алиас для сервера (запись типа A или CNAME), указывающую на IP адрес веб-сервера или его имя.

Если вы используйте домен Active Direcroty, нужно создать DNS записи на контроллере домена.

Создать CNAME запись для имени TestSite можно с помощью консоли DNS (dnsmgmt.msc), в качестве FQDN target host указать доменное имя вашего IIS сервера.

создать CNAME запись в dns

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

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

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

проверка второго сайта iis на 80 порту

Еще несколько полезных моментов, которые стоит упомянуть.

В том случае, если у вас используется локальный сервер 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

добавление дополнительного IP адреса на windows server

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

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

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

привязать сайт IIS к новому IP адресу

Управление привязкой сайтов IIS с помощью PowerShell

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

Import-Module WebAdministration

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

Get-IISSite

Get-IISSite вывести информацию о привзяказ сайтов iis в powershell

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

(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 порту.


Предыдущая статья Следующая статья


Комментариев: 6 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)