Кілька веб сайтів IIS на одному порту і IP

За замовчуванням під час установки сервера IIS (Internet Information Services) створюється порожній веб-сайт "Default Web Site", Який відповідає на стандартному веб порту - TCP 80. У термінах IIS це означає, що виконана прив'язка цього сайту (Binding) до порту 80. Щоб відкрити цей сайт, достатньо в браузері набрати ім'я сервера IIS ( "http: // web-srv1") або його IP адреса ( "http: / /10.10.0.88 "). Один веб сервер IIS може обслуговувати десятки і сотні сайтів, і технічно можна запустити кілька веб-сайтів, які слухають і відповідають на одне й те ж порту (80 або 443). Однак з інтерфейсу IIS Manager, зовсім не очевидно, що можна запустити другий сайт на цьому ж хості без прив'язки його до іншого порту (наприклад, 8080). У цій статті ми розберемося, як на одному сервері IIS запустити відразу кілька сайтів, щоб вони були прив'язані до одного і того ж порту і IP адресою.

Отже, як ми вже говорили раніше, на одному сервері 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 для двох сайтів, тобто одночасно може працювати тільки один з них.

Погодимося з цим попередженням. Отже, у нас з'явився другий сайт, також прив'язаний до 80 порту, але запустити його без зупинки першого сайту можна.

Щоб створити унікальну прив'язку, вкажемо для другого сайту інше ім'я (Host Name). Клацніть ПКМ по сайту TestSite і виберіть пункт меню Edit Bindings. Виберіть потрібну прив'язку і натисніть Edit.

В полі Host Name вкажіть унікальне ім'я хоста, до якого повинні звертатися користувачі, наприклад TestSite.

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

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

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

Все, що залишилося зробити - додати в DNS алиас для сервера (запис типу A або CNAME), що вказує на IP адреса веб-сервера або його ім'я.

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

Створити такий запис також можна за допомогою PowerShell:

Add-DnsServerResourceRecordCName -HostNameAlias ​​web-srv1.contoso.loc -Name testsite -ZoneName contoso.loc

Тепер в браузері спробуйте відкрити сайт http: // TestSite. Він повинен успішно відкритися.

Ще кілька корисних моментів, які варто згадати.

У тому випадку, якщо у вас використовується локальний сервер IIS, зіставлення імен сайтів з IP адресою сервера виконується через файл C: \ Windows \ system32 \ drivers \ etc \ hosts.

Налаштування прив'язок зберігаються в конфігураційному файлі IIS (C: \ Windows \ System32 \ inetsrv \ config \ applicationHost.config) В секції         

У нашому прикладі ця секція містить такі дані:
























За аналогією ви можете розмістити і запустити на одному порту веб-сервера IIS кілька сотень сайтів.