IIS: развёртывание веб-сервера на Windows Server для корпоративных приложений
Семёнов Евгений Сергеевич, директор АйТи Фреш. IIS — один из тех продуктов Microsoft, про который все говорят «устарел» и «нафиг он нужен», но который продолжает держать огромное количество корпоративных веб-приложений. 1С веб-клиент, OWA, SharePoint, внутренние ASP.NET порталы, ADFS, Certificate Authority Web Enrollment — всё это живёт на IIS. За 15 лет я настроил десятки IIS-ферм от маленьких до больших. В статье покажу, как развернуть IIS на Windows Server 2022, опубликовать сайт, настроить SSL и использовать ARR как reverse proxy.
Установка роли Web Server
Роль Web Server (IIS) ставится через Server Manager или PowerShell. Я всегда через PowerShell — повторяемость и скорость.
# Полный набор для корпоративного портала с ASP.NET
Install-WindowsFeature -Name Web-Server,Web-WebServer,Web-Common-Http, `
Web-Default-Doc,Web-Dir-Browsing,Web-Http-Errors,Web-Static-Content, `
Web-Http-Redirect,Web-Health,Web-Http-Logging,Web-Custom-Logging, `
Web-Log-Libraries,Web-Request-Monitor,Web-Http-Tracing,Web-Performance, `
Web-Stat-Compression,Web-Dyn-Compression,Web-Security,Web-Filtering, `
Web-Basic-Auth,Web-Windows-Auth,Web-App-Dev,Web-Net-Ext45,Web-Asp-Net45, `
Web-ISAPI-Ext,Web-ISAPI-Filter,Web-Mgmt-Tools,Web-Mgmt-Console, `
Web-Scripting-Tools -IncludeManagementTools -Restart
После установки на порту 80 отвечает дефолтная страница IIS. Открываем inetmgr — получаем знакомую консоль управления.
Структура сайта в IIS
IIS оперирует тремя понятиями: Site, Application, Virtual Directory. Я всегда объясняю разницу следующим образом:
- Site — корневая запись с IP/hostname/port binding, собственным logging-путём и пулом приложений.
- Application — подкаталог внутри сайта, выполняющийся как отдельное приложение со своим web.config и возможно другим пулом.
- Virtual Directory — просто «mount» внешнего пути внутрь сайта без изоляции приложения.
Пример: сайт portal.corp.ru с двумя приложениями — /api (ASP.NET Core 8) и /reports (классический ASP.NET Framework 4.8), каждое в своём пуле.
Создание сайта через PowerShell
Import-Module WebAdministration
# Каталог с сайтом
New-Item -Path "D:\Sites\Portal" -ItemType Directory -Force
# Application Pool
New-WebAppPool -Name "PortalPool" -Force
Set-ItemProperty IIS:\AppPools\PortalPool `
-Name managedRuntimeVersion -Value "v4.0"
Set-ItemProperty IIS:\AppPools\PortalPool `
-Name processModel.identityType -Value ApplicationPoolIdentity
Set-ItemProperty IIS:\AppPools\PortalPool `
-Name recycling.periodicRestart.time -Value "00:00:00"
# Site с двумя binding — HTTP и HTTPS
New-Website -Name "Portal" -PhysicalPath "D:\Sites\Portal" `
-ApplicationPool "PortalPool" `
-HostHeader "portal.corp.ru" -Port 80
# Доступ пула к каталогу
icacls "D:\Sites\Portal" /grant "IIS AppPool\PortalPool:(OI)(CI)RX" /T
Application Pool: настройки, которые важны
Большинство админов оставляют пул на дефолтах — и это ошибка. Правильная настройка пула решает 80% проблем с производительностью и памятью.
| Параметр | Рекомендация | Зачем |
|---|---|---|
| Pipeline mode | Integrated | Современный ASP.NET |
| Identity | ApplicationPoolIdentity | Изоляция, минимум прав |
| Idle Time-out | 0 для production | Чтобы пул не выгружался, не грузил первый запрос |
| Regular Time Interval | 0 или ночью | Не рестартовать на пользователях |
| Private Memory Limit | 70% от RAM сервера | Автоперезапуск при утечке |
| Queue Length | 2000-5000 | Держать пики без 503 |
SSL-сертификат: Let's Encrypt через win-acme
Для внутренних сервисов — сертификат от AD CS через шаблон Web Server. Для внешних — Let's Encrypt через win-acme, я много лет пользуюсь этой утилитой, она стабильна.
# Скачиваем win-acme
Invoke-WebRequest `
-Uri "https://github.com/win-acme/win-acme/releases/download/v2.2.9.1701/win-acme.v2.2.9.1701.x64.pluggable.zip" `
-OutFile "C:\Install\wacs.zip"
Expand-Archive "C:\Install\wacs.zip" -DestinationPath "C:\wacs"
# Запускаем интерактивно
cd C:\wacs
.\wacs.exe
# Выбираем: N - Create new certificate
# 1 - Read sites from IIS, выбираем Portal
# Email admin@corp.ru, accept ToS
# Certificate installed, auto-renewal set up
Win-acme создаёт задачу в Task Scheduler, каждые 9 дней проверяет сертификаты и продлевает те, что заканчиваются через 30 дней.
URL Rewrite: HTTP → HTTPS и reverse proxy
Модуль URL Rewrite — must-have для любого IIS. Ставим отдельно, скачиваем с Microsoft Download Center.
<!-- web.config фрагмент: HTTPS редирект -->
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}"
redirectType="Permanent" />
</rule>
</rules>
</rewrite>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security"
value="max-age=31536000; includeSubDomains" />
<add name="X-Frame-Options" value="SAMEORIGIN" />
<add name="X-Content-Type-Options" value="nosniff" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
ARR: reverse proxy и балансировщик
Application Request Routing — надстройка над URL Rewrite, превращающая IIS в полноценный reverse proxy с балансировкой. У нас на практике ARR отлично работает перед несколькими backend-нодами ASP.NET Core и перед 1С-серверами.
# Установка ARR
# Качаем с Microsoft — ARRv3_0.exe, ставим
# В IIS Manager появляется Application Request Routing Cache
# Включаем proxy на уровне сервера
# IIS Manager → server node → Application Request Routing Cache →
# Server Proxy Settings → Enable proxy = true
<!-- Правило прокси в web.config -->
<rule name="ReverseProxyToBackend" stopProcessing="true">
<match url="^api/(.*)" />
<action type="Rewrite" url="http://backend-cluster:5000/{R:1}"
logRewrittenUrl="true" />
<serverVariables>
<set name="HTTP_X_FORWARDED_PROTO" value="https" />
</serverVariables>
</rule>
Публикация 1С веб-клиента на IIS
1С публикация через webinst.exe — штатный инструмент платформы. Я всегда делаю отдельный сайт под 1С на отдельном порту или поддомене.
cd "C:\Program Files\1cv8\8.3.23.2022\bin"
.\webinst.exe -publish -iis -wsdir ent -dir "C:\inetpub\wwwroot\ent" `
-connstr "Srvr=""1c-srv01"";Ref=""Enterprise"";" -confpath "C:\inetpub\wwwroot\ent\default.vrd"
# После публикации в IIS появляется приложение /ent
# Проверяем: https://portal.corp.ru/ent/
# Вводим учётку 1С — должны увидеть интерфейс базы
Кейс: портал для производственного предприятия
В январе 2026 клиент — производство пищевой упаковки, 180 человек. Задача: объединить в одном веб-портале 1С УПП веб-клиент, Битрикс24-самописный модуль на ASP.NET, SharePoint-документы, Outlook Web Access. Плюс резервный сервер на случай падения основного.
Развернули два IIS 10 на Windows Server 2022 VM (Hyper-V, Dell Xeon Platinum 8280), перед ними HAProxy + Keepalived. Один сайт portal.corp.ru с URL Rewrite и ARR, направляющим пути:
/→ главная лендинг-страница/1c/→ backend 1С на 1с-srv01:80/crm/→ backend Битрикс на crm-srv01:443/docs/→ SharePoint на sp-srv01/mail/→ Exchange OWA на exch-srv01
Сертификат Let's Encrypt автообновление через win-acme. HSTS, X-Frame-Options и CSP прописаны. За 4 месяца работы — ни одного падения портала, 99.98% uptime по Icinga.
Стоимость проекта 220 000 руб за 7 рабочих дней.
Мониторинг и логирование
IIS пишет access-логи в C:\inetpub\logs\LogFiles в W3C-формате. Я всегда меняю формат на UTF-8, добавляю поле времени выполнения и отправляю в Elasticsearch через Filebeat.
# В IIS Manager → Site → Logging:
# Format = W3C
# Fields: +Time-Taken, +Server-IP, +Bytes-Received, +Cookie, +Host
# Или PowerShell
Set-ItemProperty "IIS:\Sites\Portal" `
-Name logFile.logFormat -Value "W3C"
Set-ItemProperty "IIS:\Sites\Portal" `
-Name logFile.logExtFileFlags -Value "Date,Time,ClientIP,UserName, `
SiteName,ComputerName,ServerIP,Method,UriStem,UriQuery,HttpStatus, `
Win32Status,TimeTaken,ServerPort,UserAgent,Referer,Host,BytesSent, `
BytesReceived"
Настроим IIS и корпоративный веб-портал
Разворачиваем IIS для 1С веб-клиента, Битрикс24, SharePoint, ASP.NET приложений. SSL, балансировка ARR, мониторинг, HA-кластер на Windows Server. От 3 рабочих дней.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — частые вопросы по IIS
- Где применяется IIS в корпоративном окружении?
- IIS — основной хост для ASP.NET приложений, 1С веб-клиента, SharePoint, Outlook Web Access, Remote Desktop Web Access, CA Web Enrollment и внутренних порталов на .NET Core.
- Что такое Application Pool?
- Изолированный процесс w3wp.exe, в котором работает один или несколько сайтов. Падение пула не затрагивает другие пулы. Имеет свою учётку, лимиты памяти, режим переработки.
- IIS или Nginx — что выбрать?
- На Windows-серверах для .NET приложений — IIS, он родной. Nginx удобнее для reverse proxy перед несколькими backend, для статики и Linux-стека. Иногда они работают в паре — Nginx впереди, IIS сзади.
- Как установить SSL-сертификат Let's Encrypt?
- Используйте win-acme (wacs.exe) — утилита автоматически получает сертификат, устанавливает в IIS и настраивает автопродление через Task Scheduler.
- Нужен ли IIS для 1С веб-клиента?
- Да, 1С публикация на веб работает через модуль wsisapi.dll в IIS или Apache. IIS на Windows предпочтительнее — лучше интегрируется со службой 1С:Предприятия и логированием Windows.