Модули IIS с ASP.NET Core

Примечание.

Это не последняя версия этой статьи. В текущей версии см. версию .NET 10 этой статьи.

Предупреждение

Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущей версии см. версию .NET 10 этой статьи.

Некоторые собственные модули IIS и все управляемые модули IIS не могут применяться для обработки запросов в приложениях ASP.NET Core. Во многих случаях сценарии, которые обрабатывают собственные и управляемые модули IIS, можно переложить на ASP.NET Core.

Собственные модули

В этой таблице перечислены собственные модули IIS, которые работают с приложениями ASP.NET Core и модулем ASP.NET Core.

Модуль Работает с приложениями ASP.NET Core Вариант ASP.NET Core
Анонимная аутентификация
AnonymousAuthenticationModule
Да
Обычная проверка подлинности
BasicAuthenticationModule
Да
Аутентификация с сопоставлением сертификата клиента
CertificateMappingAuthenticationModule
Да
CGI
CgiModule
Нет
Проверка конфигурации
ConfigurationValidationModule
Да
Ошибки HTTP
CustomErrorModule
Нет Промежуточное ПО для страниц с кодами состояния
Настраиваемое журналирование
CustomLoggingModule
Да
Документ по умолчанию
DefaultDocumentModule
Нет Промежуточное ПО для файлов по умолчанию
Дайджест-аутентификация
DigestAuthenticationModule
Да
Просмотр каталогов
DirectoryListingModule
Нет Промежуточное ПО для просмотра каталогов
Динамическое сжатие
DynamicCompressionModule
Да Промежуточное ПО для сжатия ответов
Трассировка неудачно завершенных запросов
FailedRequestsTracingModule
Да Ведение журналов ASP.NET Core
Кэширование файлов
FileCacheModule
Нет ПО промежуточного слоя для кэширования ответов
Кэширование HTTP
HttpCacheModule
Нет Компонент промежуточного ПО для кэширования ответов
Ведение журнала HTTP
HttpLoggingModule
Да Ведение журналов ASP.NET Core
Перенаправление HTTP
HttpRedirectionModule
Да Промежуточное ПО для перезаписи URL-адресов
Трассировка HTTP
TracingModule
Да
Аутентификация IIS с сопоставлением сертификата клиента
IISCertificateMappingAuthenticationModule
Да
Ограничения IP-адресов и доменов
IpRestrictionModule
Да
Фильтры ISAPI
IsapiFilterModule
Да Промежуточное ПО
ISAPI
IsapiModule
Да Промежуточное ПО
Поддержка протоколов
ProtocolSupportModule
Да
Фильтрация запросов
RequestFilteringModule
Да Промежуточное ПО для перезаписи URL-адресов IRule
Монитор запросов
RequestMonitorModule
Да
Переопределение URL-адресов
RewriteModule
Да Промежуточное ПО для перезаписи URL-адресов
Включения на стороне сервера
ServerSideIncludeModule
Нет
Статическое сжатие
StaticCompressionModule
Нет Промежуточное ПО для сжатия ответов
Статическое содержимое
StaticFileModule
Нет Промежуточное ПО для статических файлов
Кэширование токенов
TokenCacheModule
Да
Кэширование URI
UriCacheModule
Да
Авторизация URL-адреса
UrlAuthorizationModule
Да ASP.NET Core Identity
Протокол WebDAV
WebDAV
Нет
Проверка подлинности Windows.
WindowsAuthenticationModule
Да

†В модуле переопределения URL-адресов типы сопоставления isFile и isDirectory не работают с приложениями ASP.NET Core из-за изменений в структуре каталогов.

Управляемые модули

Управляемые модули не работают с размещенными приложениями ASP.NET Core, если для пула приложения указана версия среды CLR .NET Без управляемого кода. Для некоторых случаев ASP.NET Core предлагает альтернативное ПО промежуточного слоя.

Модуль Вариант ASP.NET Core
Анонимная идентификация
Аутентификация по умолчанию
Авторизация файла
FormsAuthentication Cookieпромежуточное ПО аутентификации
OutputCache Промежуточное ПО для кэширования ответов
Профиль
RoleManager
ScriptModule-4.0
Сеанс Промежуточное ПО для сеансов
UrlAuthorization
UrlMappingsModule Промежуточное ПО для перезаписи URL-адресов
UrlRoutingModule-4.0 ASP.NET Core Identity
WindowsAuthentication

Изменения в приложении диспетчера IIS

Если для настройки параметров применяется диспетчер IIS, изменяется файл web.config для приложения. Если вы развертываете приложение с файлом web.config, все внесенные через диспетчер IIS изменения будут перезаписаны значениями из развертываемого файла web.config. Если вы вносите изменения в файл web.config на сервере, сразу же скопируйте обновленный файл web.config с сервера в локальный проект.

Отключение модулей IIS

Если на уровне сервера настроен модуль IIS, который нужно отключить для конкретного приложения, это можно сделать добавлением параметров в файл web.config. Либо оставьте модуль на месте и отключите его с помощью параметра конфигурации (если такой параметр доступен), либо удалите модуль из приложения.

Отключение модуля

Многие модули поддерживают параметр конфигурации, позволяющий отключить их без удаления модуля из приложения. Это самый простой и быстрый способ отключить отдельный модуль. Например, можно отключить модуль перенаправления HTTP с помощью элемента <httpRedirect> в файле web.config:

<configuration>
  <system.webServer>
    <httpRedirect enabled="false" />
  </system.webServer>
</configuration>

Дополнительные сведения об отключении модулей с помощью параметров конфигурации вы найдете по ссылкам в разделе о дочерних элементах в документации, посвященной IIS <system.webServer>.

Удаление модуля

Если вы решите удалить модуль с помощью параметра в файле web.config, первым делом разблокируйте этот модуль и раздел <modules> в файле web.config:

  1. Снятие блокировки модуля на уровне сервера. Выберите сервер IIS на боковой панели Подключения диспетчера IIS. Откройте элемент Модули в области IIS. Выберите нужный модуль из списка. На боковой панели Действия справа выберите Разблокировать. Если для модуля отображается пункт действия Заблокировать, это означает, что модуль уже разблокирован, и никаких действий не требуется. Разблокируйте все модули, которые вы намерены удалить из файла web.config.

  2. Разверните приложение без раздела <modules> в web.config. Если вы развертываете приложение, для которого в файле web.config есть раздел <modules>, но этот раздел не был ранее разблокирован в диспетчере IIS, Configuration Manager создаст исключение при попытке разблокировать этот раздел. Поэтому приложение нужно развертывать без раздела <modules>.

  3. Разблокируйте раздел <modules> в web.config. На боковой панели Подключения выберите веб-сайт в разделе Сайты. В области Управление откройте Редактор конфигураций. С помощью элементов навигации выберите раздел system.webServer/modules. На боковой панели Действия справа выберите действие Разблокировать для этого раздела. Если запись действия для раздела модуля отображается как Блокировать раздел, значит, раздел модуля уже разблокирован, и никаких действий не требуется.

  4. Добавьте раздел <modules> в локальный файл web.config приложения, включив в него элемент <remove> для удаления модуля из приложения. Добавьте несколько элементов <remove>, чтобы удалить несколько модулей. При любых изменениях в файле web.config на сервере сразу же вносите такие же изменения в файл web.config для проекта на локальном компьютере. Такой способ удаления модуля никак не влияет на использование модуля в других приложениях на этом сервере.

    <configuration>
     <system.webServer>
       <modules>
         <remove name="MODULE_NAME" />
       </modules>
     </system.webServer>
    </configuration>
    

Чтобы добавить или удалить модули для IIS Express с помощью файла web.config, измените файл applicationHost.config для разблокировки раздела <modules>.

  1. Откройте файл {КОРЕНЬ ПРИЛОЖЕНИЯ}.vs\config\applicationhost.config.

  2. Найдите элемент <section> для модулей IIS и измените значение атрибута overrideModeDefault с Deny на Allow.

    <section name="modules"
             allowDefinition="MachineToApplication"
             overrideModeDefault="Allow" />
    
  3. Найдите раздел <location path="" overrideMode="Allow"><system.webServer><modules>. Для модулей, которые требуется удалить, измените значение lockItem с true на false. В следующем примере показана разблокировка модуля CGI.

    <add name="CgiModule" lockItem="false" />
    
  4. После разблокировки раздела <modules> и отдельных модулей вы можете добавлять или удалять модули IIS с помощью файла web.config приложения для запуска приложения в IIS Express.

Также модуль IIS можно удалить с помощью Appcmd.exe. Для этого включите в команду MODULE_NAME и APPLICATION_NAME:

Appcmd.exe delete module MODULE_NAME /app.name:APPLICATION_NAME

Например, так можно удалить DynamicCompressionModule с веб-сайта по умолчанию:

%windir%\system32\inetsrv\appcmd.exe delete module DynamicCompressionModule /app.name:"Default Web Site"

Минимальный набор модулей

Для запуска приложения ASP.NET Core нужны только два модуля: модуль анонимной аутентификации и модуль ASP.NET Core.

Модуль кэширования URI (UriCacheModule) позволяет IIS кэшировать конфигурацию веб-сайта на уровне URL-адресов. Без этого модуля IIS придется заново считывать и анализировать конфигурацию при каждом новом запросе, даже если один URL-адрес запрашивается несколько раз подряд. Разбор конфигурации при каждом запросе приводит к существенным потерям производительности. Поэтому мы настоятельно рекомендуем включать модуль кэширования URI во все развертывания ASP.NET Core, хотя он и не является строго обязательным для запуска размещенного приложения ASP.NET Core.

Модуль кэширования HTTP (HttpCacheModule) реализует кэш вывода служб IIS, а также логику кэширования элементов в кэше HTTP.sys. Без этого модуля содержимое не кэшируется в режиме ядра и все профили кэша игнорируются. Удаление модуля кэширования HTTP обычно крайне негативно влияет на производительность системы и потребление ресурсов. Поэтому мы настоятельно рекомендуем включать модуль кэширования HTTP во все развертывания ASP.NET Core, хотя он и не является строго обязательным для запуска размещенного приложения ASP.NET Core.

Дополнительные ресурсы