Перейти к содержимому
VDS · Windows Server

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 — так проще делать резервные копии и переустанавливать систему, не потеряв данные.