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

Некоторые собственные модули 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
No
Проверка конфигурации
ConfigurationValidationModule
Да
Ошибки HTTP
CustomErrorModule
No ПО промежуточного слоя для страниц кода состояния
Настраиваемое ведение журнала
CustomLoggingModule
Да
Документ по умолчанию
DefaultDocumentModule
No ПО промежуточного слоя для файлов по умолчанию
Дайджест-проверка подлинности
DigestAuthenticationModule
Да
Просмотр каталогов
DirectoryListingModule
No ПО промежуточного слоя для просмотра каталогов
Динамическое сжатие
DynamicCompressionModule
Да ПО промежуточного слоя сжатия ответов
Трассировка неудачно завершенных запросов
FailedRequestsTracingModule
Да Ведение журналов ASP.NET Core
Кэширование файлов
FileCacheModule
No ПО промежуточного слоя для кэширования ответов
Кэширование HTTP
HttpCacheModule
No ПО промежуточного слоя для кэширования ответов
Ведение журнала 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
No
Статическое сжатие
StaticCompressionModule
No ПО промежуточного слоя сжатия ответов
Статическое содержимое
StaticFileModule
No ПО промежуточного слоя для статических файлов
Кэшировании маркеров
TokenCacheModule
Да
Кэширование URI
UriCacheModule
Да
Авторизация URL-адреса
UrlAuthorizationModule
Да ASP.NET Core Identity
Протокол WebDAV
WebDAV
No
Проверка подлинности Windows.
WindowsAuthenticationModule
Да

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

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

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

Модуль Вариант ASP.NET Core
AnonymousIdentification
DefaultAuthentication
FileAuthorization
FormsAuthentication ПО промежуточного слоя для аутентификации на основе файлов Cookie
OutputCache ПО промежуточного слоя для кэширования ответов
Profile
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.

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