При установке сервера 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
На одном веб сервере 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.
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 порту.
Добрый день
нужна помощь в настройке
внутри домена на IIS 8 (winServer 2012r2) установлена LMS moodle. вторым сайтом, hostname sdo.spo-ket.ru
по обращению из локальной сети ни по имени сайта, ни по ip адресу веб-сервера moodle не открывается.
локально на сервере:
localhost — веб страница не найдена.
sdo.spo-ket.ru — открывается (в hosts настройки внесены)
из сети:
при обращении по ip-адресу веб-сервера открывается default сайта
на сервер dns в домене создана зона с именем сайта на вебсервере. сайт учебного заведения _www.spo-ket.ru. при указании адреса в браузере sdo.spo-ket.ru выдается страница с хостера.
Задачи:
1. настроить dns и вебсервер так, чтобы из сети по указанию sdo.spo-ket.ru (или хотя бы ip адреса) открывался внутренний веб-сайт.
2. чтобы извне можно было зайти на внутренний сайт moodle техникума.
Я бы повесил сайт sdo.spo-ket.ru на отдельный ip адрес. Это упростит настройку.
Для интранет — нужно добавить в DNS запись для sdo.spo-ket.ru указывающую на new_ip_adress
Снаружи — сделать проброс трафика (80/443) на новый ip
Добрый день! Спасибо за статью. Подскажите, на работе есть домен windows company.ru и внешний веб-сайт company.ru (хостится в облаках). Требуется создать внутренний сайт на ИИС с именем ABC (доступен должен быть только внутри локальной сети компании). Как внутри ИИС-а назвать сайт: ABC.company.ru или просто ABC? Как на нашем ДНС-сервере сайт прописать: А-запись ABC с айпишником (тогда в ДНС будет две А записи: ИИС-сервера и сайта) или СНЭЙМ?
Заранее благодарен!
Можно использовать для сайта запись ABC.company.ru. Главное создать CNAME ABC.company.ru для вашего IIS сервера (должен ссылаться на внутренний IP, типа 192..168.x.x). Если ваши внутренние компьютеры настроены на ваши собственные DNS они должны использовать именно эту запись при разрешении имен.
Здравствуйте, помогите пожалуйста, по Вашим инструкциям сделал домен для сайта, его видно с того же компьютера(локально) — можно ли(поподробнее, я малоопытен в этом) сделать его видимым с интернета для любого пользователя
Забыл сразу сказать, этто виртуальная машина aws под windows server 2019, до «игры» с dns сайт был доступен по интернету по публичному ip. после — 404 (навепрное заглушка сервера, потому как при запросе по домену отвечает cтандартное «Не удается получить доступ к сайту»)
Приветствую. Поднят IIS и 2 виртуалки с веб-сервером.
Внутри сети по доменному имени все открывается (пока сконфигурировал только 1 сайт), а извне ни в какую не получается.
В сервер напрямую заходит интернет
Тут может быть много варианто: проверить доступность сайта по IP, настроены ли правила форвардинга с внешнего адреса на втутрении, правильно ли настроен внешний DNS, как настроен фаейрвол.