IIS: запуск нескольких веб-сайтов на одном порту и IP адресе
При установке веб-сервера IIS (Internet Information Services) в Windows, создается пустой веб-сайт “Default Web Site”, который слушает на стандартном веб порту TCP 80. В этой статье мы разберёмся, как на одном веб-сервере IIS запустить несколько сайтов с разными именами и привязать их к одному HTTP/HTTPS порту и одному или разным IP адресам.
Как запустить несколько сайтов на одном порту сервера IIS?
Допустим, у вас в IIS уже создан один HTTPS сайт на 443 порту ( установка SSL сертификата в IIS). Мы добавим еще один HTTPS веб-сайт, который будет также слушать на порту TCP 443.
Создайте второй сайт в консоли управления IIS (
inetmgr
). Нажмите Site -> Add website. Укажите имя сайта TestSite, каталог с файлами сайта (c:inetpubTestSite), В разделе Bindings укажите тип HTTPS, порт 443, выберите SSL сертификат. Имя хоста пока не указывайте.
Если попробовать запустить новый сайт, появится ошибка, что один порт (443) назначен для нескольких сайтов. Одновременно на этом порту может быть запущен только один сайт IIS.
This website cannot be started. Another website may be using the same port.
Чтобы веб сервер 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.
Настройки привязок сайтов хранятся в конфигурационном файле IIS (
C:WindowsSystem32inetsrvconfigapplicationHost.config
) в секции
.
Можно настроить привязку сайта IIS из командной строки.
C:WindowsSystem32inetsrvappcmd.exe Appcmd.exe set site "testsite" /bindings:"https://testsite.contoso.com:443"
Теперь можно запустить второй веб сайт.
Добавьте запись в DNS для вашего нового имени сайта. Это может быть запись типа A или CNAME, указывающую на IP адрес веб-сервера или его имя.
Если вы разворачиваете веб сервер в зоне домена Active Directory, нужно создать DNS запись на контроллере домена. Вы можете создать CNAME запись с помощью консоли DNS (dnsmgmt.msc). В качестве FQDN target host указать FQDN имя вашего хоста с IIS.
Также можно создать DNS запись с помощью PowerShell :
Add-DnsServerResourceRecordCName -HostNameAlias msk-srv01.contoso.com -Name testsite -ZoneName contoso.com
Теперь вы можете в браузере открыть сайт https://testsite.contoso.com.
Вы можете настроить автоматический редирект в IIS с HTTP на HTTPS адрес сайта с помощью модуля URL Rewrite.
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
Теперь на DNS сервере создайте A запись для нового сайта (сразу создадим PTR запись в обратной зоне):
Add-DnsServerResourceRecordA -Name NewSite3 -IPv4Address 192.168.13.101 -ZoneName contoso.com -TimeToLive 01:00:00 –CreatePtr
После этого в настройках Site Binding привяжите сайт к новому IP адресу.
Управление привязкой сайтов IIS с помощью PowerShell
Вы можете управлять привязкой (биндингом) сайтов на сервере IIS с помощью встроенного PowerShel модуля WebAdministration:
Import-Module WebAdministration
Вывести информацию о всех имеющихся сайтах и привязках:
Get-IISSite
Либо о конкретном сайте:
(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 порту.
Windows Server 2019
IIS: запуск нескольких веб-сайтов на одном порту и IP адресе