Módulos do IIS com o ASP.NET Core

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ônima
AnonymousAuthenticationModule
Sim
Autenticação básica
BasicAuthenticationModule
Sim
Autenticação de mapeamento de certificação de cliente
CertificateMappingAuthenticationModule
Sim
CGI
CgiModule
Não
Validação da configuração
ConfigurationValidationModule
Sim
Erros HTTP
CustomErrorModule
Não Middleware de páginas de código de status
Registro em log personalizado
CustomLoggingModule
Sim
Documento padrão
DefaultDocumentModule
Não Middleware de arquivos padrão
Autenticação Digest
DigestAuthenticationModule
Sim
Pesquisa no Diretório
DirectoryListingModule
Não Middleware de navegação no diretório
Compactação dinâmica
DynamicCompressionModule
Sim Middleware de compactação de resposta
Rastreamento de solicitação com falha
FailedRequestsTracingModule
Sim Registro em log do ASP.NET Core
Cache de arquivo
FileCacheModule
Não Middleware de Cache de Resposta
Cache HTTP
HttpCacheModule
Não Middleware de Cache de Resposta
Log HTTP
HttpLoggingModule
Sim Registro em log do ASP.NET Core
Redirecionamento de HTTP
HttpRedirectionModule
Sim Middleware de regravação de URL
Rastreamento HTTP
TracingModule
Sim
Autenticação de mapeamento de certificado do cliente IIS
IISCertificateMappingAuthenticationModule
Sim
Restrições de IP e domínio
IpRestrictionModule
Yes
Filtros ISAPI
IsapiFilterModule
Sim Middleware
ISAPI
IsapiModule
Yes Middleware
Suporte de protocolo
ProtocolSupportModule
Yes
Filtragem de Solicitações
RequestFilteringModule
Sim Middleware de regravação de URL IRule
Monitor de Solicitações
RequestMonitorModule
Sim
Regravação de URL
RewriteModule
Sim Middleware de regravação de URL
Inclusões do lado do servidor
ServerSideIncludeModule
Não
Compactação estática
StaticCompressionModule
Não Middleware de compactação de resposta
Conteúdo Estático
StaticFileModule
Não Middleware de arquivos estáticos
Cache de token
TokenCacheModule
Sim
Cache de URI
UriCacheModule
Sim
Autorização de URL
UrlAuthorizationModule
Yes ASP.NET Core Identity
WebDav
WebDAV
Não
Autenticação do Windows
WindowsAuthenticationModule
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:

  1. 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.

  2. 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>.

  3. 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ção system.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.

  4. 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>:

  1. Abra {APPLICATION ROOT}\.vs\config\applicationhost.config.

  2. Localize o elemento <section> para módulos do IIS e a altere overrideModeDefault de Deny para Allow:

    <section name="modules"
             allowDefinition="MachineToApplication"
             overrideModeDefault="Allow" />
    
  3. Localize a seção <location path="" overrideMode="Allow"><system.webServer><modules>. Para todos os módulos que você deseja remover, defina lockItem de true para false. No exemplo a seguir, o módulo CGI é desbloqueado:

    <add name="CgiModule" lockItem="false" />
    
  4. 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.

Recursos adicionais