Загрузка

📘 Пункт 4. Управление сайтами и приложениями в IIS

📘 Пункт 4. Управление сайтами и приложениями в IIS

Здесь мы разберём, как IIS организует сайты, приложения и пулы приложений, чтобы понимать архитектуру.


4.1. Сайты (Sites)

  • В IIS сайт = это комбинация:

    • IP-адрес

    • Порт (обычно 80 или 443)

    • Host name (домен, например example.com)

  • Можно держать десятки сайтов на одном IIS-сервере.

Пример:

  • example.com (порт 80/443) → папка C:\inetpub\example

  • shop.com (порт 80/443) → папка D:\sites\shop


4.2. Приложения (Applications)

  • Внутри сайта можно создать приложение — это как отдельный кусок сайта с собственной логикой.

  • У приложения есть виртуальный каталог и свой Application Pool.

Пример:

  • example.com → сайт

  • example.com/blog → приложение (отдельный PHP или .NET)


4.3. Виртуальные каталоги (Virtual Directories)

  • Это ссылка на папку вне корня сайта.

  • Можно подключить папку с другого диска или сетевого ресурса.

Пример:

  • /uploadsE:\files\uploads


4.4. Application Pools (Пулы приложений)

  • Самая важная часть IIS.

  • Каждый пул = набор процессов (w3wp.exe), которые обрабатывают запросы.

  • Плюсы:

    • Изоляция сайтов (если один упал, другие работают).

    • Можно ограничить права (например, запуск от отдельного пользователя).

    • Можно настроить перезапуск, лимиты по памяти и CPU.

Совет:

  • Делай отдельный пул для каждого сайта.

  • Назначай пулу своего пользователя (не NetworkService, не SYSTEM).


4.5. Биндинги (Bindings)

  • У каждого сайта есть привязки:

    • IP: 0.0.0.0 (любой IP) или конкретный.

    • Port: 80 (HTTP), 443 (HTTPS).

    • Host name: example.com.

Так IIS понимает, какой сайт открыть при запросе.


4.6. Практика

  1. Создай тестовый сайт в IIS → привяжи к порту 8080.
  2. Настрой виртуальный каталог /images, который смотрит на папку в другом месте.
  3. Сделай отдельный Application Pool для этого сайта.
  4. Проверь, что сайт открывается по http://localhost:8080.

IIS (весь сервер)

├── Site 1 (example.com)
│ │
│ ├── Application 1 (корень сайта /)
│ │ ├── Virtual Directory: / (C:\inetpub\example)
│ │ └── Application Pool: AppPool1
│ │
│ └── Application 2 (/blog)
│ ├── Virtual Directory: /blog (D:\sites\blog)
│ └── Application Pool: AppPoolBlog

├── Site 2 (shop.com)
│ │
│ └── Application 1 (корень сайта /)
│ ├── Virtual Directory: / (D:\sites\shop)
│ └── Application Pool: AppPoolShop

└── Site 3 (test.local:8080)

└── Application 1 (/)
├── Virtual Directory: / (E:\testsite)
└── Application Pool: AppPoolTest

🔑 Что важно понять:

  1. IIS → Sites
    Один сервер IIS может держать десятки сайтов.
  2. Sites → Applications
    У каждого сайта может быть несколько приложений.
    Пример: основной сайт и отдельный /admin или /api.
  3. Applications → Virtual Directories
    Приложение может смотреть в разные папки на диске или даже на сетевых ресурсах.
  4. Applications → Application Pools
    Каждый сайт или приложение работает в своём пуле, то есть в отдельном процессе.
    Это даёт изоляцию и безопасность.

👉 В IIS Manager это всё видно как “дерево”:

  • Сайты

    • Приложения

      • Виртуальные каталоги

    • Привязки (Bindings)

  • Application Pools

 

📘 Пункт 3. Работа с безопасностью в IIS

📘 Пункт 3. Работа с безопасностью в IIS

3.1. Пользователи и группы

  • IIS использует учетные записи Windows для контроля доступа.

  • Можно ограничивать доступ к сайту по:

    • отдельным пользователям Windows,

    • группам,

    • анонимным пользователям.

Совет для PHP-сайтов: создайте отдельного пользователя для Application Pool, чтобы PHP выполнялся не под системным администратором, а под ограниченной учетной записью.


3.2. Аутентификация

IIS поддерживает несколько видов аутентификации:

Тип Описание Применение
Anonymous Доступ без логина Сайты для всех (WordPress, Joomla, обычные PHP-сайты)
Basic Логин/пароль через браузер (не шифруется без HTTPS) Административные разделы, тестовые сайты
Windows Authentication Проверка пользователя Windows Корпоративные порталы, внутренние сайты
Digest / Forms Для старых приложений или кастомных форм Редко используется

💡 Для PHP чаще всего используется Anonymous, но если админка — Basic + HTTPS.


3.3. Авторизация

  • После аутентификации IIS решает, кто что может делать.

  • Можно ограничивать доступ по:

    • папкам,

    • IP-адресам,

    • ролям пользователей.

Пример: запретить доступ к /admin всем, кроме определённого IP.


3.4. SSL / HTTPS

  • Шифрование трафика обязательно для авторизации и передачи данных.

  • В IIS:

    1. Получаем сертификат (Let’s Encrypt или платный).
    2. Добавляем привязку к сайту → HTTPS.
    3. Можно сделать редирект с HTTP → HTTPS.

💡 Для highload-сайтов с PHP лучше ставить Nginx перед IIS и обрабатывать SSL на нём, чтобы IIS работал быстрее.


3.5. Ограничение доступа и защита

  • IP Restrictions — блокировка нежелательных IP.

  • Request Filtering — фильтрация запросов, блокировка опасных URL, длинных строк, скриптов.

  • Application Pool Identity — PHP не должен работать под SYSTEM, а под отдельной учёткой с минимумом прав.

  • Logging — ведите логи (IIS + PHP) для обнаружения атак.


3.6. Дополнительные советы

  • Всегда обновляйте IIS и PHP до последних версий.

  • Не размещайте исходники PHP рядом с веб-корнем (или ограничивайте доступ через Request Filtering).

  • Используйте HTTPS даже для тестовых сайтов.

  • Разделяйте сайты на разные Application Pools, чтобы сбой одного не повлиял на другие.


Практическое задание:

    1. Проверь Application Pool сайта → назначь отдельного пользователя с минимальными правами.
    2. Настрой Anonymous для PHP, но запретите доступ к /admin по IP или Basic-аутентификацией.
    3. Установи HTTPS и сделай редирект с HTTP → HTTPS.
    4. Включи логирование всех запросов и ошибок PHP.

📘 Пункт 2. Базовые навыки (с примерами для PHP)

📘 Пункт 2. Базовые навыки (с примерами для PHP)

2.1. Создание первого сайта

В IIS каждый сайт = это:

  • имя сайта (логическое название),

  • корневая папка (где лежат файлы),

  • биндинг (порт, IP, домен).

Пример:

  1. Открой IIS Manager (inetmgr).
  2. В левой панели → Sites → Add Website.
  3. Введи:
      • Site name: MyPhpSite

      • Physical path: C:\inetpub\php_site

      • Binding: http, IP: All Unassigned, Port: 8080 (например).

  4. В браузере перейди: http://localhost:8080.


2.2. Application Pools

  • Это как «контейнеры процессов».

  • У каждого пула свои настройки: версия .NET, права пользователя, режим работы.

  • Для PHP нужно:

    • Пул в режиме Integrated.

    • Настроить запуск через FastCGI (php-cgi.exe).

Зачем это нужно?
Например, один сайт у тебя может быть на PHP 7.4, а другой — на PHP 8.2. Для этого каждому сайту нужен свой Application Pool.


2.3. Управление сайтами

  • Start / Stop / Restart — управление из IIS Manager.

  • Можно параллельно запускать несколько сайтов (каждый на своём порту или домене).

  • Проверить работу — http://localhost:порт/.


2.4. Подключение PHP к IIS

  1. Скачай PHP for Windows (Non Thread Safe) с windows.php.net.
  2. Установи PHP Manager for IIS (удобный плагин).
  3. Подключи FastCGI:
      • В IIS Manager → Handler Mappings → Add Module Mapping.

      • Request path: *.php

      • Module: FastCgiModule

      • Executable: C:\php\php-cgi.exe

      • Name: PHP.

  4. Создай файл index.php в папке сайта:
<?php
phpinfo();
?>

Зайди в браузере на http://localhost:8080/index.php → должна открыться страница с настройками PHP.


2.5. Настройка статического сайта (HTML, CSS, JS)

  • Просто положи файлы .html, .css, .js в папку сайта.

  • IIS их отдаст напрямую (без PHP).

  • Это важно: IIS умеет работать и как «чистый» веб-сервер, а PHP — только для динамики.


2.6. Кратко о перспективах

Сейчас у тебя IIS работает как «PHP-хостинг». Но дальше:

  • Можно запускать несколько версий PHP (каждая в своём пуле).

  • Настроить SSL (https://) для безопасности.

  • Сделать виртуальные каталоги для разделения проектов.

  • Подключить URL Rewrite для ЧПУ-ссылок (как в WordPress).


Практическое задание:

  1. Создай новый сайт в IIS (порт 8080).
  2. Подключи PHP через FastCGI.
  3. Запусти phpinfo(), убедись что работает.
  4. Добавь в папку ещё файл index.html и проверь, что IIS корректно отдаёт его тоже.

📘 Пункт 1. Введение в IIS

📘 Пункт 1. Введение в IIS

1.1. Что такое IIS

  • IIS (Internet Information Services) — это веб-сервер от Microsoft для Windows.

  • Он позволяет:

    • обслуживать статические сайты (HTML, CSS, JS);

    • запускать динамические приложения (ASP.NET, PHP);

    • работать как reverse proxy;

    • управлять безопасностью, аутентификацией и HTTPS.

Аналоги: Apache, Nginx. Но IIS — «родной» сервер Windows и хорошо интегрируется с .NET и Active Directory.


1.2. Версии IIS

  • IIS 7.0 (2007, Windows Server 2008) — первая модульная версия.

  • IIS 8.0 (2012, Windows Server 2012) — поддержка SNI, WebSocket.

  • IIS 10.0 (2016+, Windows 10/11, Server 2016–2022) — поддержка HTTP/2, обновлённая безопасность.
    ⚡ На Windows 10/11 домашней/про версии доступен IIS 10.0.


1.3. Основные компоненты IIS

  • Sites — веб-сайты, работающие на сервере (каждый со своим портом/доменом).

  • Application Pools — контейнеры для запуска приложений. Управляют памятью, процессами и версиями .NET.

  • Virtual Directories — «псевдопапки» сайта, указывающие на другую директорию.

  • Modules — расширения (авторизация, переписывание URL, кэширование).


1.4. Установка IIS

🖥 На Windows 10/11

  1. Открой меню:
    Панель управления → Программы → Включение или отключение компонентов Windows.
  2. Найди Internet Information Services → поставь галочку.
  3. Нажми OK, дождись установки.
  4. Проверь в браузере:
    перейди по адресу → http://localhost
    должен открыться дефолтный стартовый сайт IIS.

💻 На Windows Server

  • Через Server Manager → Add roles and features → Web Server (IIS).

  • Или PowerShell:

    Install-WindowsFeature -name Web-Server -IncludeManagementTools


1.5. Структура по умолчанию

  • Папка сайтов: C:\inetpub\wwwroot

  • Конфигурация: C:\Windows\System32\inetsrv\config\applicationHost.config

  • Консоль управления: inetmgr


Задание для тебя:

  1. Установи IIS на свой компьютер (Windows 10/11 или Server).
  2. Зайди в браузер на http://localhost и проверь стартовую страницу.
  3. Найди в меню «Пуск» → IIS Manager (inetmgr) и открой консоль.

📘 План обучения IIS

📘 План обучения IIS

 

1. Введение в IIS

  • Что такое IIS, его роль в Windows Server.

  • Версии IIS (IIS 7, 8, 10) и их отличия.

  • Установка IIS на Windows 10/11 и Windows Server (через Server Manager, PowerShell, DISM).

  • Структура: Application Pools, Sites, Virtual Directories.

2. Базовые навыки

  • Создание и настройка первого сайта.

  • Работа с Application Pool (режимы, .NET CLR, Integrated vs Classic).

  • Управление сайтами: старт, стоп, перезапуск.

  • Настройка статического сайта (HTML, CSS, JS).

  • Подключение ASP.NET / PHP к IIS.

3. Работа с безопасностью

  • Пользователи и группы в IIS.

  • Аутентификация: Anonymous, Basic, Windows Authentication.

  • Авторизация (разрешения на уровне сайта, папки, файлов).

  • SSL/TLS: установка HTTPS-сертификата, настройка привязок.

4. Управление контентом и маршрутизацией

  • Виртуальные каталоги.

  • Обработка MIME-типов.

  • Настройка URL Rewrite (редиректы, ЧПУ, правила для SEO).

  • Поддержка reverse proxy (через ARR — Application Request Routing).

5. Оптимизация и производительность

  • Настройки кэширования (Static и Dynamic Content Compression).

  • Output caching.

  • Управление ресурсами пула приложений (лимиты памяти, переработка).

  • Логирование и мониторинг производительности.

6. Безопасность и защита

  • Защита от DDoS и ограничение подключений.

  • Настройка IP Restrictions.

  • HTTPS + редирект с HTTP.

  • Установка Let’s Encrypt сертификатов на IIS.

7. Автоматизация и администрирование

  • Работа с appcmd.exe (консоль управления IIS).

  • Автоматизация через PowerShell.

  • Резервное копирование и восстановление конфигурации.

  • CI/CD: публикация приложений (Web Deploy, FTP, Git).

8. Продвинутые темы

  • Работа с Load Balancing и Web Farms.

  • Настройка ARR + NLB (Network Load Balancing).

  • Интеграция с SQL Server, Redis, внешними API.

  • Контейнеризация IIS (Docker + Windows Containers).

  • Подключение IIS к Active Directory.

9. Практика (мини-проекты)

  1. Развернуть сайт на HTML/CSS/JS.
  2. Запустить ASP.NET приложение.
  3. Настроить PHP + MySQL сайт на IIS.
  4. Сделать HTTPS с Let’s Encrypt.
  5. Реализовать правило редиректа (например, http → https).
  6. Автоматизировать деплой сайта через PowerShell.