IIS: развёртывание веб-сервера на Windows Server для корпоративных приложений
Привет! Меня зовут Семёнов Евгений Сергеевич, и я директор ITFresh. Вы, наверное, слышали про IIS? Часто про него говорят: «Да это прошлый век!» или «Кому он вообще сейчас нужен?». Знаете, на самом деле, этот продукт от Microsoft — фундамент для кучи корпоративных веб-приложений. На нём прекрасно работает что угодно: от веб-клиента 1С до Outlook Web Access, SharePoint, различных ASP.NET порталов, ADFS и даже Certificate Authority Web Enrollment. Пятнадцать лет я в IT, и за это время чего только не делал! Десятки IIS-ферм, от совсем скромных до по-настоящему гигантских, прошли через мои руки. В этой статье я хочу поделиться своими наработками. Покажу вам, как шаг за шагом развернуть IIS на Windows Server 2022, опубликовать на нём сайт, грамотно настроить SSL и эффективно использовать ARR как reverse proxy.
Установка роли Web Server
Установить роль Web Server (IIS) можно по-разному. Через Server Manager, если вы любите кликать мышкой. А можно и через 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 дней до истечения, win-acme сама его обновит. Удобно, правда?
URL Rewrite: HTTP → HTTPS и reverse proxy
Модуль URL Rewrite — это вообще маст-хэв, если вы всерьёз работаете с 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, или ARR — это уже следующая ступень. По сути, это надстройка над URL Rewrite, которая превращает ваш IIS в мощный, полноценный reverse proxy, да ещё и с балансировкой нагрузки! Мы в ITFresh на своей практике не раз убеждались: 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, это были виртуальные машины под 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. А ещё прописали все нужные HTTP-заголовки: HSTS, X-Frame-Options и Content Security Policy (CSP). Итог? За четыре месяца бесперебойной работы портала — ни одного падения! Система мониторинга Icinga показала впечатляющие 99.98% аптайма. Мы довольны, клиент счастлив!
А сколько это стоило? Весь проект, включая настройку и внедрение, обошёлся в 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.
