IIS: сайт на Windows
Как поставить веб-сервер IIS на VDS, опубликовать первый сайт на своём домене, выдать сертификат и не утонуть в журналах.
Обновлено 23 августа 2026 г.
IIS — штатный веб-сервер Windows Server. Он подходит для приложений на ASP.NET, для статики и как обратный прокси перед сервисом, слушающим локальный порт.
Установка
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
Install-WindowsFeature Web-Asp-Net48, Web-Http-Redirect, Web-Dyn-Compression
Откройте порты в брандмауэре:
New-NetFirewallRule -DisplayName "HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
New-NetFirewallRule -DisplayName "HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
Проверьте, что стартовая страница открывается по адресу машины из «Обзора» в панели /hosting/vds/m/<id>. Если нет — смотрите Брандмауэр Windows.
Первый сайт
Import-Module WebAdministration
New-Item -ItemType Directory C:\sites\example
Set-Content C:\sites\example\index.html "<h1>Работает</h1>"
New-WebAppPool -Name "example"
New-Website -Name "example" -Port 80 -HostHeader "example.ru" `
-PhysicalPath "C:\sites\example" -ApplicationPool "example"
Заголовок узла (-HostHeader) позволяет держать несколько сайтов на одном адресе: IIS различает их по домену. Домен должен указывать A-записью на адрес вашей машины.
Права на каталог сайту нужны минимальные — чтение:
icacls C:\sites\example /grant "IIS AppPool\example:(OI)(CI)R" /T
Сертификат HTTPS
Проще всего взять бесплатный сертификат клиентом win-acme: скачайте wacs.exe, запустите от администратора и выберите сайт из списка — он сам выпустит сертификат, привяжет его к сайту и создаст задание на продление.
Проверить привязки:
Get-WebBinding -Name "example"
New-WebBinding -Name "example" -Protocol https -Port 443 -HostHeader "example.ru" -SslFlags 1
Для выпуска сертификата порт 80 должен быть открыт снаружи — проверка домена идёт именно по нему.
Приложение за IIS
Если ваш сервис (Node, Python, .NET Kestrel) слушает 127.0.0.1:5000, поставьте модули URL Rewrite и Application Request Routing, включите проксирование и добавьте в web.config сайта:
<rule name="proxy" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://127.0.0.1:5000/{R:1}" />
</rule>
Так наружу торчит только IIS с сертификатом, а приложение остаётся на localhost.
Эксплуатация
Get-Website | Select-Object Name, State, PhysicalPath
Restart-WebAppPool example
Get-WebAppPoolState
Журналы лежат в C:\inetpub\logs\LogFiles и растут неограниченно — на диске 40 ГБ это заметно. Настройте ротацию в диспетчере IIS (раздел «Ведение журнала», ежедневные файлы) и удаляйте старое заданием:
Get-ChildItem C:\inetpub\logs\LogFiles -Recurse -File |
Where-Object LastWriteTime -lt (Get-Date).AddDays(-30) | Remove-Item -Force
Частые ошибки
- Ошибка 500.19 — испорченный
web.configили отсутствующий модуль. Точная причина видна в тексте ошибки, если включить подробные сообщения для локального запроса. - Пул приложения останавливается сам. Сработала защита от частых сбоев: сайт падает, IIS его выключает. Ищите причину в журнале приложений (
Get-WinEvent -LogName Application -MaxEvents 30). - Сайт открывается по адресу, но не по домену. Не совпадает заголовок узла или DNS ещё не обновился.
- 403 после публикации. Пулу приложения не выдали права на каталог.
Держите каталоги сайтов не в
C:\inetpub, а в отдельной папке вродеC:\sites— так проще делать резервные копии и переустанавливать систему, не потеряв данные.