Modules IIS avec ASP.NET Core

Certains des modules IIS natifs et tous les modules managés IIS ne peuvent pas traiter les requêtes liées aux applications ASP.NET Core. Dans de nombreux cas, ASP.NET Core offre une alternative aux scénarios traités par les modules natifs et managés IIS.

Modules natifs

Le tableau indique les modules IIS natifs qui fonctionnent avec les applications ASP.NET Core et le module ASP.NET Core.

Module Opérationnel avec les applications ASP.NET Core Option ASP.NET Core
Authentification anonyme
AnonymousAuthenticationModule
Oui
Authentification de base
BasicAuthenticationModule
Oui
Authentification par mappage de certification cliente
CertificateMappingAuthenticationModule
Oui
CGI
CgiModule
Non
Validation de configuration
ConfigurationValidationModule
Oui
Erreurs HTTP
CustomErrorModule
Non Middleware (intergiciel) de pages de codes d’état
Journalisation personnalisée
CustomLoggingModule
Oui
Document par défaut
DefaultDocumentModule
Non Middleware de fichiers par défaut
Authentification Digest
DigestAuthenticationModule
Oui
Exploration des répertoires
DirectoryListingModule
Non Middleware d’exploration des répertoires
Compression dynamique
DynamicCompressionModule
Oui Middleware de compression des réponses
Suivi des demandes ayant échoué
FailedRequestsTracingModule
Oui Journalisation ASP.NET Core
Mise en cache des fichiers
FileCacheModule
Non Intergiciel de mise en cache des réponses
Mise en cache HTTP
HttpCacheModule
Non Intergiciel de mise en cache des réponses
Journalisation HTTP
HttpLoggingModule
Oui Journalisation ASP.NET Core
Redirection HTTP
HttpRedirectionModule
Oui Intergiciel de réécriture d’URL
Suivi HTTP
TracingModule
Oui
Authentification par mappage de certificat client IIS
IISCertificateMappingAuthenticationModule
Oui
Restrictions IP et de domaine
IpRestrictionModule
Oui
Filtres ISAPI
IsapiFilterModule
Oui Middleware
ISAPI
IsapiModule
Oui Middleware
Prise en charge des protocoles
ProtocolSupportModule
Oui
Filtrage des demandes
RequestFilteringModule
Oui Middleware de réécriture d’URLIRule
Observateur de demandes
RequestMonitorModule
Oui
Réécriture d’URL
RewriteModule
Oui Intergiciel de réécriture d’URL
Textes insérés par le serveur
ServerSideIncludeModule
Non
Compression statique
StaticCompressionModule
Non Middleware de compression des réponses
Contenu statique
StaticFileModule
Non Middleware de fichiers statiques
Mise en cache de jeton
TokenCacheModule
Oui
Mise en cache d’URI
UriCacheModule
Oui
Autorisation URL
UrlAuthorizationModule
Oui ASP.NET Core Identity
WebDav
WebDAV
Non
Authentification Windows
WindowsAuthenticationModule
Oui

†Les types de correspondance isFile et isDirectory du module de réécriture d’URL ne fonctionnent pas avec les applications ASP.NET Core en raison des modifications apportées à la structure de répertoires.

Modules managés

Les modules managés ne sont pas opérationnels avec les applications ASP.NET Core hébergées quand la version CLR .NET du pool d’applications est définie sur Aucun code managé. ASP.NET Core offre des alternatives de middleware dans plusieurs cas.

Module Option ASP.NET Core
AnonymousIdentification
DefaultAuthentication
FileAuthorization
FormsAuthentication CookieIntergiciel d’authentification
OutputCache Intergiciel de mise en cache des réponses
Profil
RoleManager
ScriptModule-4.0
session Middleware de session
UrlAuthorization
UrlMappingsModule Intergiciel de réécriture d’URL
UrlRoutingModule-4.0 ASP.NET Core Identity
WindowsAuthentication

Modification de l’application avec le Gestionnaire IIS

Quand vous utilisez le Gestionnaire IIS pour configurer les paramètres, le fichier web.config de l’application est modifié. Si vous déployez une application et que vous incluez web.config, toutes les modifications apportées avec le Gestionnaire IIS sont remplacées par le fichier web.config déployé. Si des modifications sont apportées au fichier web.config du serveur, copiez le fichier web.config mis à jour sur le serveur dans le projet local immédiatement.

Désactivation des modules IIS

Si un module IIS configuré au niveau du serveur doit être désactivé pour une application, un ajout au fichier web.config de l’application peut désactiver le module. Conservez le module en place et désactivez-le à l’aide d’un paramètre de configuration (si disponible) ou supprimez le module de l’application.

Désactivation du module

De nombreux modules disposent d’un paramètre de configuration qui vous permet de les désactiver sans les supprimer de l’application. Il s’agit de la façon la plus simple et plus rapide pour désactiver un module. Par exemple, le module de redirection HTTP peut être désactivé avec l’élément <httpRedirect> dans web.config :

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

Pour plus d’informations sur la désactivation de modules avec des paramètres de configuration, suivez les liens dans la section Éléments enfants de la page IIS <system.webServer>.

Suppression de module

Si vous décidez de supprimer un module avec un paramètre dans web.config, déverrouillez le module et déverrouillez la section <modules> de web.config en premier :

  1. Déverrouillez le module au niveau du serveur. Sélectionnez le serveur IIS dans la barre latérale Connexions du Gestionnaire IIS. Ouvrez les Modules dans la zone IIS. Sélectionnez le module dans la liste. Dans la barre latérale Actions à droite, sélectionnez Déverrouiller. Si l’entrée d’action du module indique Verrouiller, cela signifie que le module est déjà déverrouillé et qu’aucune action n’est nécessaire. Déverrouillez tous les modules que vous envisagez de supprimer de web.config.

  2. Déployez l’application sans section <modules> dans web.config. Si une application est déployée avec un fichier web.config contenant la section <modules> et que celle-ci n’a pas été préalablement déverrouillée dans le Gestionnaire IIS, Configuration Manager lève une exception au moment du déverrouillage de la section. Vous devez donc déployer l’application sans section <modules>.

  3. Déverrouillez la section <modules> de web.config. Dans la barre latérale Connexions, sélectionnez le site web dans Sites. Dans la zone Gestion, ouvrez l’Éditeur de configuration. Utilisez les contrôles de navigation pour sélectionner la section system.webServer/modules. Dans la barre latérale Actions à droite, sélectionnez l’option permettant de Déverrouiller la section. Si l’entrée d’action de la section du module indique Verrouiller la section, cela signifie que le module est déjà déverrouillé et qu’aucune action n’est nécessaire.

  4. Ajoutez une section <modules> au fichier web.config local de l’application avec un élément <remove> pour supprimer le module de l’application. Ajoutez plusieurs éléments <remove> pour supprimer plusieurs modules. Si des modifications sont apportées au fichier web.config sur le serveur, effectuez immédiatement les mêmes modifications dans le fichier web.config du projet localement. La suppression d’un module à l’aide de cette approche n’affecte pas l’utilisation du module avec d’autres applications sur le serveur.

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

Pour ajouter ou supprimer des modules pour IIS Express à l’aide de web.config, modifiez applicationHost.config afin de déverrouiller la section <modules> :

  1. Ouvrez {RACINE DE L’APPLICATION}.vs\config\applicationhost.config.

  2. Recherchez l’élément <section> des modules IIS et changez overrideModeDefault en remplaçant Deny par Allow :

    <section name="modules"
             allowDefinition="MachineToApplication"
             overrideModeDefault="Allow" />
    
  3. Recherchez la section <location path="" overrideMode="Allow"><system.webServer><modules>. Pour tous les modules à supprimer, définissez lockItem en remplaçant true par false. Dans l’exemple suivant, le module CGI est déverrouillé :

    <add name="CgiModule" lockItem="false" />
    
  4. Une fois que la section <modules> et les modules individuels sont déverrouillés, vous pouvez ajouter ou supprimer des modules IIS à l’aide du fichier web.config de l’application pour permettre l’exécution de l’application sur IIS Express.

Vous pouvez également supprimer un module IIS avec Appcmd.exe. Fournissez MODULE_NAME et APPLICATION_NAME dans la commande :

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

Par exemple, supprimez DynamicCompressionModule du site web par défaut :

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

Configuration minimale des modules

Les seuls modules requis pour exécuter une application ASP.NET Core sont le module d’authentification anonyme et le module ASP.NET Core.

Le module de mise en cache d’URI (UriCacheModule) permet à IIS de mettre en cache la configuration du site web au niveau de l’URL. Sans ce module, IIS doit lire et analyser la configuration à chaque requête, même quand la même URL est demandée à plusieurs reprises. L’analyse de la configuration à chaque requête entraîne une baisse significative des performances. Bien que le module de mise en cache d’URI ne soit pas absolument nécessaire à l’exécution d’une application ASP.NET Core hébergée, nous vous recommandons de l’activer pour tous les déploiements ASP.NET Core.

Le module de mise en cache HTTP (HttpCacheModule) implémente le cache de sortie IIS, ainsi que la logique de mise en cache des éléments dans le cache HTTP.sys. Sans ce module, le contenu n’est plus mis en cache en mode noyau, et les profils de cache sont ignorés. En règle générale, la suppression du module de mise en cache HTTP a des effets négatifs sur les performances et l’utilisation des ressources. Bien que le module de mise en cache HTTP ne soit pas absolument nécessaire à l’exécution d’une application ASP.NET Core hébergée, nous vous recommandons de l’activer pour tous les déploiements ASP.NET Core.

Ressources supplémentaires