Start typing to search across invoices, services, domains, tickets, and more...
Если вам привычнее Windows или нужно запускать приложения ASP.NET, сайт на IIS в Windows Server — самый простой путь. На примере Windows Server 2016/2019/2022 разберём установку IIS через PowerShell, привязку сайта к конкретному IP и заголовку узла (особенно полезно на серверах с множеством IP для сеток сайтов), бесплатный SSL-сертификат с автопродлением через win-acme и запуск PHP через IIS FastCGI.
Выполните команды ниже в PowerShell от имени администратора — через несколько минут IIS и консоль управления будут установлены. Если планируете PHP, сразу добавьте компонент CGI (он включает FastCGI). Откройте в браузере IP сервера: страница приветствия IIS означает успех.
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
# Optional: CGI/FastCGI support (needed for PHP)
Install-WindowsFeature -Name Web-CGI
Get-WindowsFeature Web-Server, Web-CGIПривязка IIS состоит из IP-адреса, порта и имени узла. В примере создаётся site1, который отвечает на www.example.com только на 203.0.113.11, и добавляется домен без www. Подставьте свои IP и домен и заранее направьте A-запись домена на этот IP.
Import-Module WebAdministration
New-Item -ItemType Directory -Path C:\inetpub\site1 -Force
Set-Content -Path C:\inetpub\site1\index.html -Value "site1 OK"
New-Website -Name "site1" -PhysicalPath "C:\inetpub\site1" -IPAddress "203.0.113.11" -Port 80 -HostHeader "www.example.com"
New-WebBinding -Name "site1" -IPAddress "203.0.113.11" -Port 80 -HostHeader "example.com"
Get-WebBinding -Name "site1"На серверах IMIDC с множеством IP для сеток сайтов часто нужен отдельный IP для каждого сайта. Сначала добавьте все IP на сетевой адаптер (см. инструкцию «Добавление IP в Windows»), затем привяжите каждый сайт к своему IP. Без имени узла сайт отвечает на любой домен, направленный на этот IP. Остановите «Default Web Site», чтобы его привязка «Все неназначенные:80» не перехватывала запросы.
# One site per IP, no host header (answers any domain pointed at that IP)
New-Website -Name "site2" -PhysicalPath "C:\inetpub\site2" -IPAddress "203.0.113.12" -Port 80
New-Website -Name "site3" -PhysicalPath "C:\inetpub\site3" -IPAddress "203.0.113.13" -Port 80
# Stop the Default Web Site so it does not catch *:80
Stop-Website -Name "Default Web Site"
Set-ItemProperty "IIS:\Sites\Default Web Site" -Name serverAutoStart -Value $falsewin-acme (wacs.exe) — популярный клиент Let's Encrypt для Windows: он находит сайты IIS, проходит проверку, устанавливает сертификат, добавляет привязку 443 и создаёт задачу продления. Скачайте x64-архив с официального сайта win-acme или со страницы релизов на GitHub, распакуйте в C:\tools\win-acme и запустите. Выберите создание сертификата с настройками по умолчанию, затем нужный сайт и домены.
cd C:\tools\win-acme
.\wacs.exe
# Check the renewal task created by win-acme
Get-ScheduledTask | Where-Object TaskName -like "win-acme*"Перед выпуском убедитесь, что домен указывает на IP, привязанный к сайту, порт 80 доступен из интернета (нужен для HTTP-проверки), а в привязках есть все имена, которые должны попасть в сертификат.
Скачайте NTS (Non Thread Safe) x64-архив нужной версии с официального сайта PHP для Windows, распакуйте в C:\PHP, установите соответствующий Visual C++ Redistributable и скопируйте php.ini-production в php.ini. Затем через appcmd зарегистрируйте приложение FastCGI, сопоставьте ему *.php и добавьте index.php в документы по умолчанию:
$appcmd = "$env:windir\System32\inetsrv\appcmd.exe"
& $appcmd set config /section:system.webServer/fastCgi /+"[fullPath='C:\PHP\php-cgi.exe']"
& $appcmd set config /section:system.webServer/handlers /+"[name='PHP_via_FastCGI',path='*.php',verb='*',modules='FastCgiModule',scriptProcessor='C:\PHP\php-cgi.exe',resourceType='Either']"
& $appcmd set config /section:defaultDocument /+"files.[value='index.php']"
Set-Content -Path C:\inetpub\site1\info.php -Value "<?php phpinfo();"
iisresetОткройте http://ваш-домен/info.php — страница с информацией о PHP означает, что всё работает. После проверки удалите info.php, чтобы не раскрывать данные сервера.
Такую же комбинацию IP, порта и имени узла уже занимает другой сайт, чаще всего Default Web Site. Остановите его или измените привязку и запустите свой сайт снова.
Проверьте A-запись, доступность порта 80 снаружи и не блокирует ли CDN или правило перенаправления путь /.well-known/acme-challenge/.
Для ASP.NET и MSSQL — Windows + IIS. Для сайтов на PHP/MySQL Linux с панелью aaPanel/BaoTa обычно экономнее; см. инструкцию по установке BaoTa.
Если проблема не решена, создайте тикет — техподдержка IMIDC работает 24/7. Укажите IP сервера, версию ОС, выполненные команды и приложите скриншот ошибки, чтобы мы быстрее нашли причину.