From 417b677b9d5808a83c2a02f48226dc4a218cd0f3 Mon Sep 17 00:00:00 2001
From: Luke Latham <1622880+guardrex@users.noreply.github.com>
Date: Fri, 12 Oct 2018 12:08:18 -0500
Subject: [PATCH] IIS Modules topic updates (+in-proc updates) (#8831)
---
aspnetcore/host-and-deploy/iis/modules.md | 94 +++++++++---------
.../iis/modules/_static/modules.png | Bin 12688 -> 0 bytes
2 files changed, 46 insertions(+), 48 deletions(-)
delete mode 100644 aspnetcore/host-and-deploy/iis/modules/_static/modules.png
diff --git a/aspnetcore/host-and-deploy/iis/modules.md b/aspnetcore/host-and-deploy/iis/modules.md
index ebc209aaa4..0a1e5333b2 100644
--- a/aspnetcore/host-and-deploy/iis/modules.md
+++ b/aspnetcore/host-and-deploy/iis/modules.md
@@ -4,52 +4,52 @@ author: guardrex
description: Discover active and inactive IIS modules for ASP.NET Core apps and how to manage IIS modules.
ms.author: riande
ms.custom: mvc
-ms.date: 04/04/2018
+ms.date: 10/12/2018
uid: host-and-deploy/iis/modules
---
# IIS modules with ASP.NET Core
By [Luke Latham](https://github.com/guardrex)
-ASP.NET Core apps are hosted by IIS in a reverse proxy configuration. Some of the native IIS modules and all of the IIS managed modules aren't available to process requests for ASP.NET Core apps. In many cases, ASP.NET Core offers an alternative to the features of IIS native and managed modules.
+Some of the native IIS modules and all of the IIS managed modules aren't able to process requests for ASP.NET Core apps. In many cases, ASP.NET Core offers an alternative to the scenarios addressed by IIS native and managed modules.
## Native modules
The table indicates native IIS modules that are functional on reverse proxy requests to ASP.NET Core apps.
| Module | Functional with ASP.NET Core apps | ASP.NET Core Option |
-| ------ | :-------------------------------: | ------------------- |
-| **Anonymous Authentication**
`AnonymousAuthenticationModule` | Yes | |
-| **Basic Authentication**
`BasicAuthenticationModule` | Yes | |
-| **Client Certification Mapping Authentication**
`CertificateMappingAuthenticationModule` | Yes | |
-| **CGI**
`CgiModule` | No | |
-| **Configuration Validation**
`ConfigurationValidationModule` | Yes | |
-| **HTTP Errors**
`CustomErrorModule` | No | [Status Code Pages Middleware](xref:fundamentals/error-handling#configure-status-code-pages) |
-| **Custom Logging**
`CustomLoggingModule` | Yes | |
-| **Default Document**
`DefaultDocumentModule` | No | [Default Files Middleware](xref:fundamentals/static-files#serve-a-default-document) |
-| **Digest Authentication**
`DigestAuthenticationModule` | Yes | |
-| **Directory Browsing**
`DirectoryListingModule` | No | [Directory Browsing Middleware](xref:fundamentals/static-files#enable-directory-browsing) |
-| **Dynamic Compression**
`DynamicCompressionModule` | Yes | [Response Compression Middleware](xref:performance/response-compression) |
-| **Tracing**
`FailedRequestsTracingModule` | Yes | [ASP.NET Core Logging](xref:fundamentals/logging/index#tracesource-provider) |
-| **File Caching**
`FileCacheModule` | No | [Response Caching Middleware](xref:performance/caching/middleware) |
-| **HTTP Caching**
`HttpCacheModule` | No | [Response Caching Middleware](xref:performance/caching/middleware) |
-| **HTTP Logging**
`HttpLoggingModule` | Yes | [ASP.NET Core Logging](xref:fundamentals/logging/index)
Implementations: [elmah.io](https://github.com/elmahio/Elmah.Io.Extensions.Logging), [Loggr](https://github.com/imobile3/Loggr.Extensions.Logging), [NLog](https://github.com/NLog/NLog.Extensions.Logging), [Sentry](https://github.com/getsentry/sentry-dotnet), [Serilog](https://github.com/serilog/serilog-extensions-logging)
-| **HTTP Redirection**
`HttpRedirectionModule` | Yes | [URL Rewriting Middleware](xref:fundamentals/url-rewriting) |
+| --- | :---: | --- |
+| **Anonymous Authentication**
`AnonymousAuthenticationModule` | Yes | |
+| **Basic Authentication**
`BasicAuthenticationModule` | Yes | |
+| **Client Certification Mapping Authentication**
`CertificateMappingAuthenticationModule` | Yes | |
+| **CGI**
`CgiModule` | No | |
+| **Configuration Validation**
`ConfigurationValidationModule` | Yes | |
+| **HTTP Errors**
`CustomErrorModule` | No | [Status Code Pages Middleware](xref:fundamentals/error-handling#configure-status-code-pages) |
+| **Custom Logging**
`CustomLoggingModule` | Yes | |
+| **Default Document**
`DefaultDocumentModule` | No | [Default Files Middleware](xref:fundamentals/static-files#serve-a-default-document) |
+| **Digest Authentication**
`DigestAuthenticationModule` | Yes | |
+| **Directory Browsing**
`DirectoryListingModule` | No | [Directory Browsing Middleware](xref:fundamentals/static-files#enable-directory-browsing) |
+| **Dynamic Compression**
`DynamicCompressionModule` | Yes | [Response Compression Middleware](xref:performance/response-compression) |
+| **Tracing**
`FailedRequestsTracingModule` | Yes | [ASP.NET Core Logging](xref:fundamentals/logging/index#tracesource-provider) |
+| **File Caching**
`FileCacheModule` | No | [Response Caching Middleware](xref:performance/caching/middleware) |
+| **HTTP Caching**
`HttpCacheModule` | No | [Response Caching Middleware](xref:performance/caching/middleware) |
+| **HTTP Logging**
`HttpLoggingModule` | Yes | [ASP.NET Core Logging](xref:fundamentals/logging/index) |
+| **HTTP Redirection**
`HttpRedirectionModule` | Yes | [URL Rewriting Middleware](xref:fundamentals/url-rewriting) |
| **IIS Client Certificate Mapping Authentication**
`IISCertificateMappingAuthenticationModule` | Yes | |
-| **IP and Domain Restrictions**
`IpRestrictionModule` | Yes | |
-| **ISAPI Filters**
`IsapiFilterModule` | Yes | [Middleware](xref:fundamentals/middleware/index) |
-| **ISAPI**
`IsapiModule` | Yes | [Middleware](xref:fundamentals/middleware/index) |
-| **Protocol Support**
`ProtocolSupportModule` | Yes | |
-| **Request Filtering**
`RequestFilteringModule` | Yes | [URL Rewriting Middleware `IRule`](xref:fundamentals/url-rewriting#irule-based-rule) |
-| **Request Monitor**
`RequestMonitorModule` | Yes | |
-| **URL Rewriting**
`RewriteModule` | Yes† | [URL Rewriting Middleware](xref:fundamentals/url-rewriting) |
-| **Server-Side Includes**
`ServerSideIncludeModule` | No | |
-| **Static Compression**
`StaticCompressionModule` | No | [Response Compression Middleware](xref:performance/response-compression) |
-| **Static Content**
`StaticFileModule` | No | [Static File Middleware](xref:fundamentals/static-files) |
-| **Token Caching**
`TokenCacheModule` | Yes | |
-| **URI Caching**
`UriCacheModule` | Yes | |
-| **URL Authorization**
`UrlAuthorizationModule` | Yes | [ASP.NET Core Identity](xref:security/authentication/identity) |
-| **Windows Authentication**
`WindowsAuthenticationModule` | Yes | |
+| **IP and Domain Restrictions**
`IpRestrictionModule` | Yes | |
+| **ISAPI Filters**
`IsapiFilterModule` | Yes | [Middleware](xref:fundamentals/middleware/index) |
+| **ISAPI**
`IsapiModule` | Yes | [Middleware](xref:fundamentals/middleware/index) |
+| **Protocol Support**
`ProtocolSupportModule` | Yes | |
+| **Request Filtering**
`RequestFilteringModule` | Yes | [URL Rewriting Middleware `IRule`](xref:fundamentals/url-rewriting#irule-based-rule) |
+| **Request Monitor**
`RequestMonitorModule` | Yes | |
+| **URL Rewriting**†
`RewriteModule` | Yes | [URL Rewriting Middleware](xref:fundamentals/url-rewriting) |
+| **Server-Side Includes**
`ServerSideIncludeModule` | No | |
+| **Static Compression**
`StaticCompressionModule` | No | [Response Compression Middleware](xref:performance/response-compression) |
+| **Static Content**
`StaticFileModule` | No | [Static File Middleware](xref:fundamentals/static-files) |
+| **Token Caching**
`TokenCacheModule` | Yes | |
+| **URI Caching**
`UriCacheModule` | Yes | |
+| **URL Authorization**
`UrlAuthorizationModule` | Yes | [ASP.NET Core Identity](xref:security/authentication/identity) |
+| **Windows Authentication**
`WindowsAuthenticationModule` | Yes | |
†The URL Rewrite Module's `isFile` and `isDirectory` match types don't work with ASP.NET Core apps due to the changes in [directory structure](xref:host-and-deploy/directory-structure).
@@ -83,12 +83,12 @@ If an IIS module is configured at the server level that must be disabled for an
### Module deactivation
-Many modules offer a configuration setting that allows them to be disabled without removing the module from the app. This is the simplest and quickest way to deactivate a module. For example, the HTTP Redirection Module can be disabled with the **\** element in *web.config*:
+Many modules offer a configuration setting that allows them to be disabled without removing the module from the app. This is the simplest and quickest way to deactivate a module. For example, the HTTP Redirection Module can be disabled with the `` element in *web.config*:
```xml
-
+
```
@@ -97,23 +97,23 @@ For more information on disabling modules with configuration settings, follow th
### Module removal
-If opting to remove a module with a setting in *web.config*, unlock the module and unlock the **\** section of *web.config* first:
+If opting to remove a module with a setting in *web.config*, unlock the module and unlock the `` section of *web.config* first:
1. Unlock the module at the server level. Select the IIS server in the IIS Manager **Connections** sidebar. Open the **Modules** in the **IIS** area. Select the module in the list. In the **Actions** sidebar on the right, select **Unlock**. Unlock as many modules as you plan to remove from *web.config* later.
-2. Deploy the app without a **\** section in *web.config*. If an app is deployed with a *web.config* containing the **\** section without having unlocked the section first in the IIS Manager, the Configuration Manager throws an exception when attempting to unlock the section. Therefore, deploy the app without a **\** section.
+2. Deploy the app without a `` section in *web.config*. If an app is deployed with a *web.config* containing the `` section without having unlocked the section first in the IIS Manager, the Configuration Manager throws an exception when attempting to unlock the section. Therefore, deploy the app without a `` section.
-3. Unlock the **\** section of *web.config*. In the **Connections** sidebar, select the website in **Sites**. In the **Management** area, open the **Configuration Editor**. Use the navigation controls to select the `system.webServer/modules` section. In the **Actions** sidebar on the right, select to **Unlock** the section.
+3. Unlock the `` section of *web.config*. In the **Connections** sidebar, select the website in **Sites**. In the **Management** area, open the **Configuration Editor**. Use the navigation controls to select the `system.webServer/modules` section. In the **Actions** sidebar on the right, select to **Unlock** the section.
-4. At this point, a **\** section can be added to the *web.config* file with a **\** element to remove the module from the app. Multiple **\** elements can be added to remove multiple modules. If *web.config* changes are made on the server, immediately make the same changes to the project's *web.config* file locally. Removing a module this way won't affect the use of the module with other apps on the server.
+4. At this point, a `` section can be added to the *web.config* file with a `` element to remove the module from the app. Multiple `` elements can be added to remove multiple modules. If *web.config* changes are made on the server, immediately make the same changes to the project's *web.config* file locally. Removing a module this way won't affect the use of the module with other apps on the server.
```xml
-
-
-
-
-
-
+
+
+
+
+
+
```
@@ -133,15 +133,13 @@ For example, remove the `DynamicCompressionModule` from the Default Web Site:
The only modules required to run an ASP.NET Core app are the Anonymous Authentication Module and the ASP.NET Core Module.
-![IIS Manager open to Modules with the minimum module configuration shown](modules/_static/modules.png)
-
The URI Caching Module (`UriCacheModule`) allows IIS to cache website configuration at the URL level. Without this module, IIS must read and parse configuration on every request, even when the same URL is repeatedly requested. Parsing the configuration every request results in a significant performance penalty. *Although the URI Caching Module isn't strictly required for a hosted ASP.NET Core app to run, we recommend that the URI Caching Module be enabled for all ASP.NET Core deployments.*
The HTTP Caching Module (`HttpCacheModule`) implements the IIS output cache and also the logic for caching items in the HTTP.sys cache. Without this module, content is no longer cached in kernel mode, and cache profiles are ignored. Removing the HTTP Caching Module usually has adverse effects on performance and resource usage. *Although the HTTP Caching Module isn't strictly required for a hosted ASP.NET Core app to run, we recommend that the HTTP Caching Module be enabled for all ASP.NET Core deployments.*
## Additional resources
-* [Host on Windows with IIS](xref:host-and-deploy/iis/index)
+*
* [Introduction to IIS Architectures: Modules in IIS](/iis/get-started/introduction-to-iis/introduction-to-iis-architecture#modules-in-iis)
* [IIS Modules Overview](/iis/get-started/introduction-to-iis/iis-modules-overview)
* [Customizing IIS 7.0 Roles and Modules](https://technet.microsoft.com/library/cc627313.aspx)
diff --git a/aspnetcore/host-and-deploy/iis/modules/_static/modules.png b/aspnetcore/host-and-deploy/iis/modules/_static/modules.png
deleted file mode 100644
index 034dd9ed257886a949f779bcfc21ff5a087f4533..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 12688
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
GeEM%z+M444