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

Автор Люк Латэм (Luke Latham)By Luke Latham

Некоторые собственные модули IIS и все управляемые модули IIS не могут применяться для обработки запросов в приложениях ASP.NET Core.Some of the native IIS modules and all of the IIS managed modules aren't able to process requests for ASP.NET Core apps. Во многих случаях сценарии, которые обрабатывают собственные и управляемые модули IIS, можно переложить на ASP.NET Core.In many cases, ASP.NET Core offers an alternative to the scenarios addressed by IIS native and managed modules.

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

В этой таблице перечислены собственные модули IIS, которые работают с приложениями ASP.NET Core и модулем ASP.NET Core.The table indicates native IIS modules that are functional with ASP.NET Core apps and the ASP.NET Core Module.

ModuleModule Доступность для приложений ASP.NET CoreFunctional with ASP.NET Core apps Вариант ASP.NET CoreASP.NET Core Option
Анонимная аутентификацияAnonymous Authentication
AnonymousAuthenticationModule
ДаYes
Обычная проверка подлинностиBasic Authentication
BasicAuthenticationModule
ДаYes
Аутентификация с сопоставлением сертификата клиентаClient Certification Mapping Authentication
CertificateMappingAuthenticationModule
ДаYes
CGICGI
CgiModule
НетNo
Проверка конфигурацииConfiguration Validation
ConfigurationValidationModule
ДаYes
Ошибки HTTPHTTP Errors
CustomErrorModule
НетNo ПО промежуточного слоя для страниц кода состоянияStatus Code Pages Middleware
Настраиваемое ведение журналаCustom Logging
CustomLoggingModule
ДаYes
Документ по умолчаниюDefault Document
DefaultDocumentModule
НетNo ПО промежуточного слоя для файлов по умолчаниюDefault Files Middleware
Дайджест-проверка подлинностиDigest Authentication
DigestAuthenticationModule
ДаYes
Просмотр каталоговDirectory Browsing
DirectoryListingModule
НетNo ПО промежуточного слоя для просмотра каталоговDirectory Browsing Middleware
Динамическое сжатиеDynamic Compression
DynamicCompressionModule
ДаYes ПО промежуточного слоя для сжатия ответовResponse Compression Middleware
Трассировка неудачно завершенных запросовFailed Requests Tracing
FailedRequestsTracingModule
ДаYes Ведение журналов ASP.NET CoreASP.NET Core Logging
Кэширование файловFile Caching
FileCacheModule
НетNo ПО промежуточного слоя для кэширования ответовResponse Caching Middleware
Кэширование HTTPHTTP Caching
HttpCacheModule
НетNo ПО промежуточного слоя для кэширования ответовResponse Caching Middleware
Ведение журнала HTTPHTTP Logging
HttpLoggingModule
ДаYes Ведение журналов ASP.NET CoreASP.NET Core Logging
Перенаправление HTTPHTTP Redirection
HttpRedirectionModule
ДаYes ПО промежуточного слоя для переопределения URL-адресовURL Rewriting Middleware
Трассировка HTTPHTTP Tracing
TracingModule
ДаYes
Аутентификация IIS с сопоставлением сертификата клиентаIIS Client Certificate Mapping Authentication
IISCertificateMappingAuthenticationModule
ДаYes
Ограничения IP-адресов и доменовIP and Domain Restrictions
IpRestrictionModule
ДаYes
Фильтры ISAPIISAPI Filters
IsapiFilterModule
ДаYes ПО промежуточного слояMiddleware
ISAPIISAPI
IsapiModule
ДаYes ПО промежуточного слояMiddleware
Поддержка протоколовProtocol Support
ProtocolSupportModule
ДаYes
Фильтрация запросовRequest Filtering
RequestFilteringModule
ДаYes ПО промежуточного слоя для переопределения URL-адресовIRuleURL Rewriting Middleware IRule
Монитор запросовRequest Monitor
RequestMonitorModule
ДаYes
Переопределение URL-адресовURL Rewriting
RewriteModule
ДаYes ПО промежуточного слоя для переопределения URL-адресовURL Rewriting Middleware
Включения на стороне сервераServer-Side Includes
ServerSideIncludeModule
НетNo
Статическое сжатиеStatic Compression
StaticCompressionModule
НетNo ПО промежуточного слоя для сжатия ответовResponse Compression Middleware
Статическое содержимоеStatic Content
StaticFileModule
НетNo ПО промежуточного слоя для статических файловStatic File Middleware
Кэшировании маркеровToken Caching
TokenCacheModule
ДаYes
Кэширование URIURI Caching
UriCacheModule
ДаYes
Авторизация URL-адресаURL Authorization
UrlAuthorizationModule
ДаYes Идентификация ASP.NET CoreASP.NET Core Identity
Проверка подлинности WindowsWindows Authentication
WindowsAuthenticationModule
ДаYes

†В модуле переопределения URL-адресов типы сопоставления isFile и isDirectory не работают с приложениями ASP.NET Core из-за изменений в структуре каталогов.†The URL Rewrite Module's isFile and isDirectory match types don't work with ASP.NET Core apps due to the changes in directory structure.

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

Управляемые модули не работают с размещенными приложениями ASP.NET Core, если для пула приложения указана версия среды CLR .NET Без управляемого кода.Managed modules are not functional with hosted ASP.NET Core apps when the app pool's .NET CLR version is set to No Managed Code. Для некоторых случаев ASP.NET Core предлагает альтернативное ПО промежуточного слоя.ASP.NET Core offers middleware alternatives in several cases.

ModuleModule Вариант ASP.NET CoreASP.NET Core Option
AnonymousIdentificationAnonymousIdentification
DefaultAuthenticationDefaultAuthentication
FileAuthorizationFileAuthorization
FormsAuthenticationFormsAuthentication ПО промежуточного слоя для аутентификации по файлам cookieCookie Authentication Middleware
OutputCacheOutputCache ПО промежуточного слоя для кэширования ответовResponse Caching Middleware
ПрофильProfile
RoleManagerRoleManager
ScriptModule-4.0ScriptModule-4.0
СеансSession ПО промежуточного слоя для сеансовSession Middleware
UrlAuthorizationUrlAuthorization
UrlMappingsModuleUrlMappingsModule ПО промежуточного слоя для переопределения URL-адресовURL Rewriting Middleware
UrlRoutingModule-4.0UrlRoutingModule-4.0 Идентификация ASP.NET CoreASP.NET Core Identity
WindowsAuthenticationWindowsAuthentication

Изменения в приложении диспетчера IISIIS Manager application changes

Если для настройки параметров применяется диспетчер IIS, изменяется файл web.config для приложения.When using IIS Manager to configure settings, the web.config file of the app is changed. Если вы развертываете приложение с файлом web.config, все внесенные через диспетчер IIS изменения будут перезаписаны значениями из развертываемого файла web.config.If deploying an app and including web.config, any changes made with IIS Manager are overwritten by the deployed web.config file. Если вы вносите изменения в файл web.config на сервере, сразу же скопируйте обновленный файл web.config с сервера в локальный проект.If changes are made to the server's web.config file, copy the updated web.config file on the server to the local project immediately.

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

Если на уровне сервера настроен модуль IIS, который нужно отключить для конкретного приложения, это можно сделать добавлением параметров в файл web.config.If an IIS module is configured at the server level that must be disabled for an app, an addition to the app's web.config file can disable the module. Здесь вы можете сохранить модуль, отключив его с помощью соответствующего параметра конфигурации (если поддерживается), либо полностью удалить модуль из приложения.Either leave the module in place and deactivate it using a configuration setting (if available) or remove the module from the app.

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

Многие модули поддерживают параметр конфигурации, позволяющий отключить их без удаления модуля из приложения.Many modules offer a configuration setting that allows them to be disabled without removing the module from the app. Это самый простой и быстрый способ отключить отдельный модуль.This is the simplest and quickest way to deactivate a module. Например, можно отключить модуль перенаправления HTTP с помощью элемента <httpRedirect> в файле web.config:For example, the HTTP Redirection Module can be disabled with the <httpRedirect> element in web.config:

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

Дополнительные сведения об отключении модулей с помощью параметров конфигурации вы найдете по ссылкам в разделе о дочерних элементах в документации, посвященной IIS <system.webServer>.For more information on disabling modules with configuration settings, follow the links in the Child Elements section of IIS <system.webServer>.

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

Если вы решите удалить модуль с помощью параметра в файле web.config, первым делом разблокируйте этот модуль и раздел <modules> в файле web.config:If opting to remove a module with a setting in web.config, unlock the module and unlock the <modules> section of web.config first:

  1. Снятие блокировки модуля на уровне сервера.Unlock the module at the server level. Выберите сервер IIS на боковой панели Подключения диспетчера IIS.Select the IIS server in the IIS Manager Connections sidebar. Откройте элемент Модули в области IIS.Open the Modules in the IIS area. Выберите нужный модуль из списка.Select the module in the list. На боковой панели Действия справа выберите Разблокировать.In the Actions sidebar on the right, select Unlock. Если для модуля указано действие записи Блокировать, модуль уже разблокирован и ничего делать не нужно.If the action entry for the module appears as Lock, the module is already unlocked, and no action is required. Разблокируйте все модули, которые вы намерены удалить из файла web.config.Unlock as many modules as you plan to remove from web.config later.

  2. Разверните приложение без раздела <modules> в файле web.config. Если вы развертываете приложение, для которого в файлеweb.config есть раздел <modules>, но этот раздел не был ранее разблокирован в диспетчере IIS, Configuration Manager создаст исключение при попытке разблокировать этот раздел.Deploy the app without a <modules> section in web.config. If an app is deployed with a web.config containing the <modules> section without having unlocked the section first in the IIS Manager, the Configuration Manager throws an exception when attempting to unlock the section. Поэтому приложение нужно развертывать без раздела <modules>.Therefore, deploy the app without a <modules> section.

  3. Разблокируйте раздел <modules> файла web.config. На боковой панели Подключения выберите веб-сайт в разделе Сайты.Unlock the <modules> section of web.config. In the Connections sidebar, select the website in Sites. В области Управление откройте Редактор конфигураций.In the Management area, open the Configuration Editor. С помощью элементов навигации выберите раздел system.webServer/modules.Use the navigation controls to select the system.webServer/modules section. На боковой панели Действия справа выберите действие Разблокировать для этого раздела.In the Actions sidebar on the right, select to Unlock the section. Если для раздела модуля указано действие записи Блокировать раздел, раздел модуля уже разблокирован и ничего делать не нужно.If the action entry for the module section appears as Lock Section, the module section is already unlocked, and no action is required.

  4. Верните раздел <modules> в файл web.config, указав в нем элемент <remove> для удаления модуля из приложения.Add a <modules> section to the app's local web.config file with a <remove> element to remove the module from the app. Добавьте несколько элементов <remove>, чтобы удалить несколько модулей.Add multiple <remove> elements to remove multiple modules. При любых изменениях в файле web.config на сервере сразу же вносите такие же изменения в файл web.config для проекта на локальном компьютере.If web.config changes are made on the server, immediately make the same changes to the project's web.config file locally. Такой способ удаления модуля никак не влияет на использование модуля в других приложениях на этом сервере.Removing a module using this approach doesn't affect the use of the module with other apps on the server.

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

Чтобы добавить или удалить модули для IIS Express с помощью файла web.config, измените файл applicationHost.config для разблокировки раздела <modules>.In order to add or remove modules for IIS Express using web.config, modify applicationHost.config to unlock the <modules> section:

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

  2. Найдите элемент <section> для модулей IIS и измените значение атрибута overrideModeDefault с Deny на Allow.Locate the <section> element for IIS modules and change overrideModeDefault from Deny to Allow:

    <section name="modules"
             allowDefinition="MachineToApplication"
             overrideModeDefault="Allow" />
    
  3. Найдите раздел <location path="" overrideMode="Allow"><system.webServer><modules>.Locate the <location path="" overrideMode="Allow"><system.webServer><modules> section. Для модулей, которые требуется удалить, измените значение lockItem с true на false.For any modules that you wish to remove, set lockItem from true to false. В следующем примере показана разблокировка модуля CGI.In the following example, the CGI Module is unlocked:

    <add name="CgiModule" lockItem="false" />
    
  4. После разблокировки раздела <modules> и отдельных модулей вы можете добавлять или удалять модули IIS с помощью файла web.config приложения для запуска приложения в IIS Express.After the <modules> section and individual modules are unlocked, you're free to add or remove IIS modules using the app's web.config file for running the app on IIS Express.

Также модуль IIS можно удалить с помощью Appcmd.exe.An IIS module can also be removed with Appcmd.exe. Для этого включите в команду MODULE_NAME и APPLICATION_NAME:Provide the MODULE_NAME and APPLICATION_NAME in the command:

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

Например, так можно удалить DynamicCompressionModule с веб-сайта по умолчанию:For example, remove the DynamicCompressionModule from the Default Web Site:

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

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

Для запуска приложения ASP.NET Core нужны только два модуля: модуль анонимной аутентификации и модуль ASP.NET Core.The only modules required to run an ASP.NET Core app are the Anonymous Authentication Module and the ASP.NET Core Module.

Модуль кэширования URI (UriCacheModule) позволяет IIS кэшировать конфигурацию веб-сайта на уровне URL-адресов.The URI Caching Module (UriCacheModule) allows IIS to cache website configuration at the URL level. Без этого модуля IIS придется заново считывать и анализировать конфигурацию при каждом новом запросе, даже если один URL-адрес запрашивается несколько раз подряд.Without this module, IIS must read and parse configuration on every request, even when the same URL is repeatedly requested. Синтаксический анализ конфигурации при каждом запросе значительно снижает производительность системы.Parsing the configuration every request results in a significant performance penalty. Поэтому мы настоятельно рекомендуем включать модуль кэширования URI во все развертывания ASP.NET Core, хотя он и не является строго обязательным для запуска размещенного приложения ASP.NET Core.Although the URI Caching Module isn't strictly required for a hosted ASP.NET Core app to run, we recommend that the URI Caching Module be enabled for all ASP.NET Core deployments.

Модуль кэширования HTTP (HttpCacheModule) реализует кэш вывода служб IIS, а также логику кэширования элементов в кэше HTTP.sys.The HTTP Caching Module (HttpCacheModule) implements the IIS output cache and also the logic for caching items in the HTTP.sys cache. Без этого модуля содержимое не кэшируется в режиме ядра и все профили кэша игнорируются.Without this module, content is no longer cached in kernel mode, and cache profiles are ignored. Удаление модуля кэширования HTTP обычно крайне негативно влияет на производительность системы и потребление ресурсов.Removing the HTTP Caching Module usually has adverse effects on performance and resource usage. Поэтому мы настоятельно рекомендуем включать модуль кэширования HTTP во все развертывания ASP.NET Core, хотя он и не является строго обязательным для запуска размещенного приложения ASP.NET Core.Although the HTTP Caching Module isn't strictly required for a hosted ASP.NET Core app to run, we recommend that the HTTP Caching Module be enabled for all ASP.NET Core deployments.

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