IIS 模块与 ASP.NET CoreIIS modules with ASP.NET Core

本文内容

某些本机 IIS 模块和所有 IIS 托管模块无法处理 ASP.NET Core 应用的请求。在许多情况下,ASP.NET Core 提供了 IIS 本机和托管模块解决的方案的替代方案。

本机模块Native modules

该表指示在使用 ASP.NET Core 应用和 ASP.NET Core 模块时正常工作的本机 IIS 模块。

模块在 ASP.NET Core 应用内可用ASP.NET Core 选项
匿名身份验证AnonymousAuthenticationModule
基本身份验证BasicAuthenticationModule
客户端证书映射身份验证CertificateMappingAuthenticationModule
CGICgiModule
配置验证ConfigurationValidationModule
HTTP 错误CustomErrorModule状态代码页中间件
自定义日志记录CustomLoggingModule
默认文档DefaultDocumentModule默认文件中间件
摘要式身份验证DigestAuthenticationModule
目录浏览DirectoryListingModule目录浏览中间件
动态压缩DynamicCompressionModule响应压缩中间件
请求跟踪失败FailedRequestsTracingModuleASP.NET Core 日志记录
文件缓存FileCacheModule响应缓存中间件
HTTP 缓存HttpCacheModule响应缓存中间件
HTTP 日志记录HttpLoggingModuleASP.NET Core 日志记录
HTTP 重定向HttpRedirectionModuleURL 重写中间件
HTTP 跟踪TracingModule
IIS 客户端证书映射身份验证IISCertificateMappingAuthenticationModule
IP 和域限制IpRestrictionModule
ISAPI 筛选器IsapiFilterModule中间件
ISAPIIsapiModule中间件
协议支持ProtocolSupportModule
请求筛选RequestFilteringModuleURL 重写中间件IRule
请求监视器RequestMonitorModule
URL 重写†RewriteModuleURL 重写中间件
服务器端包括ServerSideIncludeModule
静态压缩StaticCompressionModule响应压缩中间件
静态内容StaticFileModule静态文件中间件
令牌缓存TokenCacheModule
URI 缓存UriCacheModule
URL 授权UrlAuthorizationModuleASP.NET Core 标识
Windows 身份验证WindowsAuthenticationModule

†由于目录结构中的更改,URL 重写模块的 isFileisDirectory 匹配类型不适用于 ASP.NET Core 应用。

托管模块Managed modules

当应用池的 .NET CLR 版本设置为“无托管代码” 时,托管 ASP.NET Core 应用的托管模块无法使用 。ASP.NET Core 在几种情况下提供了中间件替代方案。

模块ASP.NET Core 选项
AnonymousIdentification
DefaultAuthentication
FileAuthorization
FormsAuthenticationCookie 身份验证中间件
OutputCache响应缓存中间件
配置文件
RoleManager
ScriptModule-4.0
会话会话中间件
UrlAuthorization
UrlMappingsModuleURL 重写中间件
UrlRoutingModule-4.0ASP.NET Core 标识
WindowsAuthentication

IIS 管理器应用程序更改IIS Manager application changes

使用 IIS 管理器配置设置时,应用的 web.config 文件已更改。如果部署应用并包括 web.config ,则使用 IIS 管理器所做的任何更改都会被部署的 web.config 文件覆盖。如果更改服务器的 web.config 文件,请立即将服务器上已更新的 web.config 文件复制到本地项目。

禁用 IIS 模块Disabling IIS modules

如果在服务器级别配置了必须为应用禁用的 IIS 模块,则应用 web.config 文件还可以禁用该模块。将模块留在原位并使用配置设置(如果可用)将其停用或从应用中移除模块。

模块停用Module deactivation

许多模块提供一个配置设置,允许在不从应用中删除模块的情况下禁用它们。这是停用模块最简单、快捷的方式。例如,可使用 web.config 中的 <httpRedirect> 元素禁用 HTTP 重定向模块 :

  1. <configuration>
  2. <system.webServer>
  3. <httpRedirect enabled="false" />
  4. </system.webServer>
  5. </configuration>

有关通过配置设置禁用模块的详细信息,请按照 IIS <system.webServer> 的子元素 部分中的链接进行操作。

模块删除Module removal

如果选择使用 web.config 中的设置删除模块,请先解锁此模块和 web.config 的 <modules> 部分 :

  • 解锁服务器级别的模块。在 IIS 管理器“连接” 边栏中选择 IIS 服务器。打开 IIS 区域中的模块 。在列表中选择该模块。在右侧的“操作” 边栏中,选择“解锁” 。如果该模块的操作条目显示为“锁定”,则该模块已被解锁,且无需任何操作 。解锁尽可能多稍后计划从 web.config 中删除的模块。

  • 在不使用 web.config 的 <modules> 部分的情况下部署应用 。如果使用包含 <modules> 部分的 web.config 部署应用,但未先在 IIS 管理器中解锁该部分,则配置管理器会在尝试解锁该部分时引发异常 。因此,请在不使用 <modules> 部分的情况下部署该应用。

  • 解锁 web.config 的 <modules> 部分 。在“连接” 边栏中,选择“站点”中的网站 。在“管理” 区域中,打开“配置编辑器” 。使用导航控件选择 system.webServer/modules 部分。在右侧的“操作” 边栏中,选择“解锁” 该部分。如果该模块的操作条目显示为“锁定部分”,则该模块已被解锁,且无需任何操作 。

  • 可使用 <remove> 元素将 <modules> 部分添加到应用的本地 web.config 文件,从应用中删除模块 。可添加多个 <remove> 元素来删除多个模块。如果在服务器上更改 web.config ,请立即在本地对项目的 web.config 文件执行相同的更改。以这种方式删除模块不会影响模块的使用与服务器上的其他应用。

  1. <configuration>
  2. <system.webServer>
  3. <modules>
  4. <remove name="MODULE_NAME" />
  5. </modules>
  6. </system.webServer>
  7. </configuration>

要使用 web.config 为 IIS Express 添加或删除模块,请修改 applicationHost.config 以解锁 <modules> 部分 :

  • 打开 {APPLICATION ROOT}.vs\config\applicationhost.config 。

  • 找到 IIS 模块的 <section> 元素,并将 overrideModeDefaultDeny 更改为 Allow

  1. <section name="modules"
  2. allowDefinition="MachineToApplication"
  3. overrideModeDefault="Allow" />
  • 找到 <location path="" overrideMode="Allow"><system.webServer><modules> 部分。对于任何要删除的模块,请将 lockItemtrue 设置为 false。在以下示例中,已解锁 CGI 模块:
  1. <add name="CgiModule" lockItem="false" />
  • 解锁 <modules> 部分和单个模块后,可使用应用的 web.config 文件添加或删除 IIS 模块,以便在 IIS Express 上运行应用 。

IIS 模块还可以使用 Appcmd.exe 删除 。该命令中提供 MODULE_NAMEAPPLICATION_NAME

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

例如,从默认网站中删除 DynamicCompressionModule

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

最小模块配置Minimum module configuration

要求运行 ASP.NET Core 应用的模块只有匿名身份验证模块和 ASP.NET Core 模块。

URI 缓存模块 (UriCacheModule) 允许 IIS 在 URL 级别缓存网站配置。不使用此模块的话,即使重复请求相同的 URL,IIS 也必须读取并分析每个请求的配置。分析每个请求的配置会导致严重的性能损失。 虽然托管的 ASP.NET Core 应用并非严格要求运行 URI 缓存模块,但我们建议为所有 ASP.NET Core 部署启用 URI 缓存模块。

HTTP 缓存模块 (HttpCacheModule) 实现 IIS 输出缓存以及用于在 HTTP.sys 缓存中缓存项目的逻辑。如果不使用此模块,内容不再以内核模式缓存,并且缓存配置文件将被忽略。删除 HTTP 缓存模块通常会对性能和资源使用情况产生不利影响。 虽然托管的 ASP.NET Core 应用程序并非严格要求运行 HTTP 缓存模块,但我们建议为所有 ASP.NET Core 部署启用 HTTP 缓存模块。

其他资源Additional resources