Módulos do IIS com o ASP.NET Core
Observação
Esta não é a versão mais recente deste artigo. Para informações sobre a versão vigente, confira a Versão do .NET 8 deste artigo.
Aviso
Esta versão do ASP.NET Core não tem mais suporte. Para obter mais informações, confira .NET e a Política de Suporte do .NET Core. Para informações sobre a versão vigente, confira a Versão do .NET 8 deste artigo.
Importante
Essas informações relacionam-se ao produto de pré-lançamento, que poderá ser substancialmente modificado antes do lançamento comercial. A Microsoft não oferece nenhuma garantia, explícita ou implícita, quanto às informações fornecidas aqui.
Para informações sobre a versão vigente, confira a Versão do .NET 8 deste artigo.
Alguns dos módulos nativos do IIS e todos os módulos gerenciados do IIS não são capazes de processar solicitações para aplicativos do ASP.NET Core. Em muitos casos, o ASP.NET Core oferece uma alternativa aos cenários abordados pelos módulos gerenciados e nativos do IIS.
Módulos nativos
A tabela indica os módulos IIS nativos que funcionam com aplicativos ASP.NET Core e o Módulo do ASP.NET Core.
Módulo | Funcional com os aplicativos do ASP.NET Core | Opção do ASP.NET Core |
---|---|---|
Autenticação AnônimaAnonymousAuthenticationModule |
Sim | |
Autenticação básicaBasicAuthenticationModule |
Sim | |
Autenticação de mapeamento de certificação de clienteCertificateMappingAuthenticationModule |
Sim | |
CGICgiModule |
Não | |
Validação da configuraçãoConfigurationValidationModule |
Sim | |
Erros HTTPCustomErrorModule |
Não | Middleware de páginas de código de status |
Registro em log personalizadoCustomLoggingModule |
Sim | |
Documento padrãoDefaultDocumentModule |
Não | Middleware de arquivos padrão |
Autenticação DigestDigestAuthenticationModule |
Sim | |
Pesquisa no DiretórioDirectoryListingModule |
Não | Middleware de navegação no diretório |
Compactação dinâmicaDynamicCompressionModule |
Sim | Middleware de compactação de resposta |
Rastreamento de solicitação com falhaFailedRequestsTracingModule |
Sim | Registro em log do ASP.NET Core |
Cache de arquivoFileCacheModule |
Não | Middleware de Cache de Resposta |
Cache HTTPHttpCacheModule |
Não | Middleware de Cache de Resposta |
Log HTTPHttpLoggingModule |
Sim | Registro em log do ASP.NET Core |
Redirecionamento de HTTPHttpRedirectionModule |
Sim | Middleware de regravação de URL |
Rastreamento HTTPTracingModule |
Sim | |
Autenticação de mapeamento de certificado do cliente IISIISCertificateMappingAuthenticationModule |
Sim | |
Restrições de IP e domínioIpRestrictionModule |
Yes | |
Filtros ISAPIIsapiFilterModule |
Sim | Middleware |
ISAPIIsapiModule |
Yes | Middleware |
Suporte de protocoloProtocolSupportModule |
Yes | |
Filtragem de SolicitaçõesRequestFilteringModule |
Sim | Middleware de regravação de URL IRule |
Monitor de SolicitaçõesRequestMonitorModule |
Sim | |
Regravação de URL†RewriteModule |
Sim | Middleware de regravação de URL |
Inclusões do lado do servidorServerSideIncludeModule |
Não | |
Compactação estáticaStaticCompressionModule |
Não | Middleware de compactação de resposta |
Conteúdo EstáticoStaticFileModule |
Não | Middleware de arquivos estáticos |
Cache de tokenTokenCacheModule |
Sim | |
Cache de URIUriCacheModule |
Sim | |
Autorização de URLUrlAuthorizationModule |
Yes | ASP.NET Core Identity |
WebDavWebDAV |
Não | |
Autenticação do WindowsWindowsAuthenticationModule |
Sim |
†Os tipos de correspondência isFile
e isDirectory
do módulo de regravação da URL não funcionam com aplicativos de ASP.NET Core devido a alterações na estrutura de diretórios.
Módulos gerenciados
Os módulos gerenciados não funcionam com aplicativos do ASP.NET Core hospedados quando a versão do .NET CLR do pool de aplicativos está definido como Sem Código Gerenciado. O ASP.NET Core oferece alternativas de middleware em vários casos.
Módulo | Opção do ASP.NET Core |
---|---|
AnonymousIdentification | |
DefaultAuthentication | |
FileAuthorization | |
FormsAuthentication | Cookie Middleware de autenticação |
OutputCache | Middleware de Cache de Resposta |
Perfil | |
RoleManager | |
ScriptModule-4.0 | |
Session | Middleware de sessão |
UrlAuthorization | |
UrlMappingsModule | Middleware de regravação de URL |
UrlRoutingModule-4.0 | ASP.NET Core Identity |
WindowsAuthentication |
Alterações de aplicativo do Gerenciador do IIS
Ao usar o Gerenciador do IIS para definir as configurações, o arquivo web.config do aplicativo é alterado. Ao implantar um aplicativo e incluir web.config, todas as alterações feitas com o Gerenciador do IIS são substituídas pelo arquivo web.config implantado. Se forem feitas alterações para o arquivo web.config do servidor, copie o arquivo web.config atualizado no servidor para o projeto local imediatamente.
Desabilitando módulos do IIS
Se um módulo do IIS é configurado no nível do servidor que deve ser desabilitado para um aplicativo, uma adição ao arquivo web.config do aplicativo pode desabilitar o módulo. Deixe o módulo no lugar e desative-o usando uma definição de configuração (se disponível) ou remova o módulo do aplicativo.
Desativação do módulo
Muitos módulos oferecem uma configuração que permite que eles sejam desabilitados sem remover o módulo do aplicativo. Essa é a maneira mais simples e rápida de desativar um módulo. Por exemplo, o módulo de redirecionamento de HTTP pode ser desabilitado com o elemento <httpRedirect>
em web.config:
<configuration>
<system.webServer>
<httpRedirect enabled="false" />
</system.webServer>
</configuration>
Para obter mais informações sobre como desabilitar módulos com definições de configuração, siga os links na seção Elementos Filho de IIS <system.webServer>.
Remoção do módulo
Se optar pela remoção de um módulo com uma configuração em web.config, desbloqueie o módulo e desbloqueie a seção <modules>
de web.config primeiro:
Desbloqueie o módulo no nível do servidor. Selecione o servidor do IIS na barra lateral Conexões do Gerenciador do IIS. Abra os Módulos na área IIS. Selecione o módulo na lista. Na barra lateral Ações à direita, selecione Desbloquear. Se a entrada de ação para o módulo aparece como Bloquear, o módulo já está desbloqueado e nenhuma ação é necessária. Desbloqueie todos os módulos que você planeja remover de web.config posteriormente.
Implante o aplicativo sem uma seção
<modules>
em web.config. Se um aplicativo é implantado com um web.config que contém a seção<modules>
sem ter desbloqueado a seção primeiro no Gerenciador de IIS, o Gerente de Configuração gera uma exceção ao tentar desbloquear a seção. Portanto, implante o aplicativo sem uma seção<modules>
.Desbloqueie a seção
<modules>
de web.config. Na barra lateral Conexões, selecione o site em Sites. Na área Gerenciamento, abra o Editor de Configuração. Use os controles de navegação para selecionar a seçãosystem.webServer/modules
. Na barra lateral Ações à direita, selecione para Desbloquear a seção. Se a entrada de ação para a seção do módulo aparece como Bloquear Seção, a seção do módulo já está desbloqueada e nenhuma ação é necessária.Adicione uma seção
<modules>
ao arquivo web.config local do aplicativo com um elemento<remove>
para remover o módulo do aplicativo. Adicione vários elementos<remove>
para remover vários módulos. Se alterações a web.config forem feitas no servidor, faça imediatamente as mesmas alterações no arquivo web.config do projeto localmente. Remover um módulo usando essa abordagem não afeta o uso do módulo com outros aplicativos no servidor.<configuration> <system.webServer> <modules> <remove name="MODULE_NAME" /> </modules> </system.webServer> </configuration>
Para adicionar ou remover módulos para IIS Express usando o web.config, modifique o applicationHost.config para desbloquear a seção <modules>
:
Abra {APPLICATION ROOT}\.vs\config\applicationhost.config.
Localize o elemento
<section>
para módulos do IIS e a altereoverrideModeDefault
deDeny
paraAllow
:<section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />
Localize a seção
<location path="" overrideMode="Allow"><system.webServer><modules>
. Para todos os módulos que você deseja remover, definalockItem
detrue
parafalse
. No exemplo a seguir, o módulo CGI é desbloqueado:<add name="CgiModule" lockItem="false" />
Após a seção
<modules>
e módulos individuais serem desbloqueados, você pode adicionar ou remover módulos do IIS usando o arquivo web.config do aplicativo para executar o aplicativo no IIS Express.
Um módulo do IIS também pode ser removido com Appcmd.exe. Forneça o MODULE_NAME
e APPLICATION_NAME
no comando:
Appcmd.exe delete module MODULE_NAME /app.name:APPLICATION_NAME
Por exemplo, remova o DynamicCompressionModule
do site da Web padrão:
%windir%\system32\inetsrv\appcmd.exe delete module DynamicCompressionModule /app.name:"Default Web Site"
Configuração do módulo mínimo
Os únicos módulos necessários para executar um aplicativo ASP.NET Core são o módulo de Autenticação Anônima e o Módulo do ASP.NET Core.
O módulo de cache de URI (UriCacheModule
) permite configuração de site, do IIS para o cache, no nível da URL. Sem esse módulo, o IIS deve ler e analisar a configuração em cada solicitação, mesmo quando a mesma URL é solicitada repetidamente. Analisar a configuração em cada solicitação resulta em uma perda de desempenho significativa. Embora o módulo de cache de URI não seja estritamente necessário para que um aplicativo ASP.NET Core hospedado seja executado, é recomendável que o módulo de cache de URI seja habilitado para todas as implantações do ASP.NET Core.
O módulo de cache HTTP (HttpCacheModule
) implementa o cache de saída do IIS e também a lógica para gravar itens no cache do HTTP.sys. Sem esse módulo, o conteúdo não é mais armazenado em cache no modo kernel e perfis de cache são ignorados. Remover o módulo de cache HTTP geralmente tem um efeito adverso sobre o desempenho e o uso de recursos. Embora o módulo de cache HTTP não seja estritamente necessário para que um aplicativo ASP.NET Core hospedado seja executado, é recomendável que o módulo de cache de HTTP seja habilitado para todas as implantações do ASP.NET Core.