IIS: запуск нескольких веб-сайтов на одном порту и IP адресе

При установке веб-сервера IIS (Internet Information Services) в Windows, создается пустой веб-сайт “ Default Web Site ”, который слушает на стандартном веб порту TCP 80. В этой статье мы разберёмся, как на одном веб-сервере IIS запустить несколько сайтов с разными именами и привязать их к одному HTTP/HTTPS порту и одному или разным IP адресам.

Запуск нескольких веб сайтов в IIS

Как запустить несколько сайтов на одном порту сервера IIS?

Допустим, у вас в IIS уже создан один HTTPS сайт на 443 порту ( установка SSL сертификата в IIS ). Мы добавим еще один HTTPS веб-сайт, который будет также слушать на порту TCP 443.

Создайте второй сайт в консоли управления IIS ( inetmgr ). Нажмите Site -> Add website. Укажите имя сайта TestSite , каталог с файлами сайта ( c:inetpubTestSite ), В разделе Bindings укажите тип HTTPS, порт 443, выберите SSL сертификат. Имя хоста пока не указывайте.

Создать второй сайт в iss

Если попробовать запустить новый сайт, появится ошибка, что один порт (443) назначен для нескольких сайтов. Одновременно на этом порту может быть запущен только один сайт IIS.

This website cannot be started. Another website may be using the same port.

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

Чтобы веб сервер IIS мог распределять HTTP запросы между несколькими сайтами, у каждого из них должен быть уникальный идентификатор. В IIS он определяется тремя атрибутами:

  • номер TCP порта
  • IP адрес
  • имя узла (host header)

Значение этих атрибутов для каждого сайта хранится в атрибуте ServerBindings метабазы IIS в формате IP:Port:Hostname. Если значения всех трех атрибутов у двух сайтов совпадают, IIS не сможет запустить второй сайт. Чтобы запустить второй сайт на том же порту и IP адресе, вам нужно задать ему уникальное имя ( host header ) и создать в DNS запись, которая задаст соответствие между именем сайта и его IP.

Итак, чтобы запустить второй сайт, нужно выбрать Edit Bindings -> Edit и добавить в Host Header уникальное DNS имя для этого сайта. Например testsite.contoso.com .

изменить host header сайта IIS

Если на HTTPS сайтах используются разные SSL сертификаты, и они запущены на одном IP адресе, для таких сайтов нужно в разделе Binding включить опцию Require Server Name Indication (SNI). Если это не сделать, IIS не сможет определить какой сертификат использовать (т.к. HTTP заголовки еще не доступны во время SSL/TLS рукопожатия).

Включить Server Name Indication (SNI) в IIS

Настройки привязок сайтов хранятся в конфигурационном файле IIS ( C:WindowsSystem32inetsrvconfigapplicationHost.config ) в секции <sites> .

Можно настроить привязку сайта IIS из командной строки.

C:WindowsSystem32inetsrvappcmd.exe Appcmd.exe set site "testsite" /bindings:"https://testsite.contoso.com:443"

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

Запуск сайта IIS

Добавьте запись в DNS для вашего нового имени сайта. Это может быть запись типа A или CNAME, указывающую на IP адрес веб-сервера или его имя.

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

Добавить A или CNAME запиь сайта в DNS

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

Add-DnsServerResourceRecordCName -HostNameAlias msk-srv01.contoso.com -Name testsite -ZoneName contoso.com

Теперь вы можете в браузере открыть сайт https://testsite.contoso.com .

Запуск сайтов на одном 443 порту веб сервера IIS

Вы можете настроить автоматический редирект в IIS с HTTP на HTTPS адрес сайта с помощью модуля URL Rewrite.

На отдельностоящем веб сервере IIS можно создать имени сайтов с IP адресом сервера через локальный файл hosts ( C:Windowssystem32driversetchosts ).

Настройка нескольких сайтов в IIS на разных IP адресах

Веб сервер IIS также позволяет запускать сайты на разных IP адресах. Сначала нужно добавить дополнительный 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 contoso.com -TimeToLive 01:00:00 –CreatePtr

После этого в настройках Site Binding привяжите сайт к новому IP адресу.

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

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

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

Import-Module WebAdministration

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

Get-IISSite

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

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

(Get-Website -Name testsite).bindings.Collection

Изменить порт веб-сайта с 443 на 81:

Set-WebBinding -Name testsite -BindingInformation "*:443:testsite.contoso.com" -PropertyName 'Port' -Value '81'

Изменить IP адрес сайта:

Set-WebBinding -Name testsite -BindingInformation "192.168.13.101:81:testsite.contoso.com" -PropertyName 'IPAddress' -Value '192.168.13.100'

Добавить новую привязки сайту:

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

Удалить привязку:

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

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

EnglishRussianUkrainian