- 通用
- IIS
- Docker
- DevOps
- Azure 应用服务
IIS 模块与 ASP.NET Core
作者:Luke Latham
某些本机 IIS 模块和所有 IIS 托管模块无法处理 ASP.NET Core 应用的请求。 在许多情况下,ASP.NET Core 提供了 IIS 本机和托管模块解决的方案的替代方案。
本机模块
该表指示在使用 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 |
是 | 响应压缩中间件 |
请求跟踪失败FailedRequestsTracingModule |
是 | ASP.NET Core 日志记录 |
文件缓存FileCacheModule |
否 | 响应缓存中间件 |
HTTP 缓存HttpCacheModule |
否 | 响应缓存中间件 |
HTTP 日志记录HttpLoggingModule |
是 | ASP.NET Core 日志记录 |
HTTP 重定向HttpRedirectionModule |
是 | URL 重写中间件 |
HTTP 跟踪TracingModule |
是 | |
IIS 客户端证书映射身份验证IISCertificateMappingAuthenticationModule |
是 | |
IP 和域限制IpRestrictionModule |
是 | |
ISAPI 筛选器IsapiFilterModule |
是 | 中间件 |
ISAPIIsapiModule |
是 | 中间件 |
协议支持ProtocolSupportModule |
是 | |
请求筛选RequestFilteringModule |
是 | URL 重写中间件IRule |
请求监视器RequestMonitorModule |
是 | |
URL 重写†;RewriteModule |
是 | URL 重写中间件 |
服务器端包括ServerSideIncludeModule |
否 | |
静态压缩StaticCompressionModule |
否 | 响应压缩中间件 |
静态内容StaticFileModule |
否 | 静态文件中间件 |
令牌缓存TokenCacheModule |
是 | |
URI 缓存UriCacheModule |
是 | |
URL 授权UrlAuthorizationModule |
是 | ASP.NET Core 标识 |
Windows 身份验证WindowsAuthenticationModule |
是 |
†由于目录结构中的更改,URL 重写模块的 isFile
和 isDirectory
匹配类型不适用于 ASP.NET Core 应用。
托管模块
当应用池的 .NET CLR 版本设置为“无托管代码” 时,托管 ASP.NET Core 应用的托管模块无法使用 。 ASP.NET Core 在几种情况下提供了中间件替代方案。
模块 | ASP.NET Core 选项 |
---|---|
AnonymousIdentification | |
DefaultAuthentication | |
FileAuthorization | |
FormsAuthentication | Cookie 身份验证中间件 |
OutputCache | 响应缓存中间件 |
配置文件 | |
RoleManager | |
ScriptModule-4.0 | |
会话 | 会话中间件 |
UrlAuthorization | |
UrlMappingsModule | URL 重写中间件 |
UrlRoutingModule-4.0 | ASP.NET Core 标识 |
WindowsAuthentication |
IIS 管理器应用程序更改
使用 IIS 管理器配置设置时,应用的 web.config 文件已更改。 如果部署应用并包括 web.config ,则使用 IIS 管理器所做的任何更改都会被部署的 web.config 文件覆盖。 如果更改服务器的 web.config 文件,请立即将服务器上已更新的 web.config 文件复制到本地项目。
禁用 IIS 模块
如果在服务器级别配置了必须为应用禁用的 IIS 模块,则应用 web.config 文件还可以禁用该模块。 将模块留在原位并使用配置设置(如果可用)将其停用或从应用中移除模块。
模块停用
许多模块提供一个配置设置,允许在不从应用中删除模块的情况下禁用它们。 这是停用模块最简单、快捷的方式。 例如,可使用 web.config 中的 <httpRedirect>
元素禁用 HTTP 重定向模块 :
<configuration> <system.webServer> <httpRedirect enabled="false" /> </system.webServer> </configuration>
有关通过配置设置禁用模块的详细信息,请按照 IIS <system.webServer> 的子元素 部分中的链接进行操作。
模块删除
如果选择使用 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 文件执行相同的更改。 以这种方式删除模块不会影响模块的使用与服务器上的其他应用。<configuration> <system.webServer> <modules> <remove name="MODULE_NAME" /> </modules> </system.webServer> </configuration>
要使用 web.config 为 IIS Express 添加或删除模块,请修改 applicationHost.config 以解锁 <modules>
部分 :
打开 {APPLICATION ROOT}\.vs\config\applicationhost.config 。
找到 IIS 模块的
<section>
元素,并将overrideModeDefault
从Deny
更改为Allow
:<section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />
找到
<location path="" overrideMode="Allow"><system.webServer><modules>
部分。 对于任何要删除的模块,请将lockItem
从true
设置为false
。 在以下示例中,已解锁 CGI 模块:<add name="CgiModule" lockItem="false" />
解锁
<modules>
部分和单个模块后,可使用应用的 web.config 文件添加或删除 IIS 模块,以便在 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 级别缓存网站配置。 不使用此模块的话,即使重复请求相同的 URL,IIS 也必须读取并分析每个请求的配置。 分析每个请求的配置会导致严重的性能损失。 虽然托管的 ASP.NET Core 应用并非严格要求运行 URI 缓存模块,但我们建议为所有 ASP.NET Core 部署启用 URI 缓存模块。
HTTP 缓存模块 (HttpCacheModule
) 实现 IIS 输出缓存以及用于在 HTTP.sys 缓存中缓存项目的逻辑。 如果不使用此模块,内容不再以内核模式缓存,并且缓存配置文件将被忽略。 删除 HTTP 缓存模块通常会对性能和资源使用情况产生不利影响。 虽然托管的 ASP.NET Core 应用程序并非严格要求运行 HTTP 缓存模块,但我们建议为所有 ASP.NET Core 部署启用 HTTP 缓存模块。