ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
Windows Server

Сайт на Windows Server с IIS: установка, привязка к IP, бесплатный SSL и PHP

5 шагов 13 мин чтения 2 просмотров 0
Содержание

Если вам привычнее Windows или нужно запускать приложения ASP.NET, сайт на IIS в Windows Server — самый простой путь. На примере Windows Server 2016/2019/2022 разберём установку IIS через PowerShell, привязку сайта к конкретному IP и заголовку узла (особенно полезно на серверах с множеством IP для сеток сайтов), бесплатный SSL-сертификат с автопродлением через win-acme и запуск PHP через IIS FastCGI.

Шаг 1: Установить IIS командой Install-WindowsFeature

Выполните команды ниже в 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 автоматически включается правило брандмауэра «Службы Интернета (входящий трафик HTTP)». Если порт 443 закрыт, воспользуйтесь инструкцией по открытию портов в брандмауэре Windows.

Шаг 2: Создать сайт IIS и привязать IP и заголовок узла

Привязка 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"

Шаг 3: Привязки IIS на сервере с множеством IP

На серверах 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 $false
Каждая комбинация «IP + порт + имя узла» может принадлежать только одному сайту, иначе сайт не запустится. Перед массовым добавлением проверьте текущие привязки через Get-WebBinding.

Шаг 4: Бесплатный SSL-сертификат для IIS через win-acme

win-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-проверки), а в привязках есть все имена, которые должны попасть в сертификат.

Шаг 5: Запуск PHP на IIS через FastCGI

Скачайте 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. Остановите его или измените привязку и запустите свой сайт снова.

win-acme не проходит проверку.

Проверьте A-запись, доступность порта 80 снаружи и не блокирует ли CDN или правило перенаправления путь /.well-known/acme-challenge/.

Что выбрать: IIS или aaPanel/BaoTa?

Для ASP.NET и MSSQL — Windows + IIS. Для сайтов на PHP/MySQL Linux с панелью aaPanel/BaoTa обычно экономнее; см. инструкцию по установке BaoTa.

Если проблема не решена, создайте тикет — техподдержка IMIDC работает 24/7. Укажите IP сервера, версию ОС, выполненные команды и приложите скриншот ошибки, чтобы мы быстрее нашли причину.

Помог ли вам данный ответ?

Похожие руководства