ASP.NET Core での IIS モジュール

一部のネイティブ IIS モジュールとすべての IIS マネージド モジュールでは、ASP.NET Core アプリに対する要求を処理することはできません。 多くの場合、ASP.NET Core には、IIS のネイティブ モジュールおよびマネージド モジュールによって処理されるシナリオの代替が用意されています。

ネイティブ モジュール

次の表は、ASP.NET Core アプリおよび ASP.NET Core モジュールで機能するネイティブ IIS モジュールを示します。

Module ASP.NET Core アプリで機能するか ASP.NET Core のオプション
匿名認証
AnonymousAuthenticationModule
はい
基本認証
BasicAuthenticationModule
はい
クライアント証明書マッピング認証
CertificateMappingAuthenticationModule
はい
CGI
CgiModule
いいえ
構成検証
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
はい ミドルウェア
ISAPI
IsapiModule
はい ミドルウェア
プロトコル サポート
ProtocolSupportModule
はい
要求のフィルタリング
RequestFilteringModule
はい URL リライト ミドルウェアIRule
要求監視
RequestMonitorModule
はい
URL リライト
RewriteModule
はい URL リライト ミドルウェア
サーバー側インクルード
ServerSideIncludeModule
いいえ
静的圧縮
StaticCompressionModule
いいえ 応答圧縮ミドルウェア
静的コンテンツ
StaticFileModule
いいえ 静的ファイル ミドルウェア
トークン キャッシュ
TokenCacheModule
はい
URI キャッシュ
UriCacheModule
はい
URL 認証
UrlAuthorizationModule
はい ASP.NET Core Identity
WebDav
WebDAV
いいえ
Windows 認証
WindowsAuthenticationModule
はい

†URL リライト モジュールの isFile および isDirectory 一致タイプは、ディレクトリ構造の変更のため、ASP.NET Core アプリでは動作しません。

マネージド モジュール

アプリ プールの .NET CLR バージョンが [マネージ コードなし] に設定されている場合、マネージド モジュールはホストされた ASP.NET Core アプリでは機能 "しません"。 ASP.NET Core では、いくつかのケースにおいてミドルウェアの代替機能が提供されています。

Module ASP.NET Core のオプション
AnonymousIdentification
DefaultAuthentication
FileAuthorization
FormsAuthentication Cookie 認証ミドルウェア
OutputCache 応答キャッシュ ミドルウェア
Profile
RoleManager
ScriptModule-4.0
セッション セッション ミドルウェア
UrlAuthorization
UrlMappingsModule URL リライト ミドルウェア
UrlRoutingModule-4.0 ASP.NET Core Identity
WindowsAuthentication

IIS マネージャー アプリケーションの変更

IIS マネージャーを使って設定を構成すると、アプリの web.config ファイルが変更されます。 アプリを展開し、web.config を含めた場合、IIS マネージャーを使って行われた変更は、展開される web.config ファイルによって上書きされます。 サーバーの web.config ファイルを変更する場合は、サーバー上の更新された web.config ファイルをローカル プロジェクトにすぐにコピーしてください。

IIS モジュールの無効化

アプリに対して無効にする必要がある IIS モジュールがサーバー レベルで構成されている場合、アプリの web.config ファイルへの追加によってモジュールを無効にすることができます。 モジュールをそのまま残し、構成の設定を使って非アクティブにするか (使用可能な場合)、アプリからモジュールを削除します。

モジュールの非アクティブ化

多くのモジュールには、アプリからモジュールを削除せずに無効にすることができる構成設定が用意されています。 これは、モジュールを非アクティブ化する最も簡単ですばやい方法です。 たとえば、HTTP リダイレクト モジュールは、web.config<httpRedirect> 要素を使って無効にできます。

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

構成設定を使ってモジュールを無効にする方法の詳細については、IIS の「<system.webServer>」の「子要素」のリンクに従ってください。

モジュールの削除

web.config の設定を使ってモジュールを削除する場合は、最初に、モジュールのロックを解除し、web.config<modules> セクションのロックを解除します。

  1. サーバー レベルでモジュールのロックを解除します。 IIS マネージャーの [接続] サイド バーで IIS サーバーを選びます。 [IIS] 領域で [モジュール] を開きます。 一覧でモジュールを選びます。 右側の [アクション] サイド バーで、 [ロック解除] を選びます。 モジュールのアクション エントリが [ロック] と表示される場合、モジュールのロックは既に解除されています。必要な操作はありません。 後で web.config から削除する予定のモジュールをできるだけ多くロック解除します。

  2. web.config<modules> セクションを指定しないでアプリを展開します。最初に IIS マネージャーでセクションをロック解除せずに、<modules> セクションを含む web.config を使ってアプリを展開した場合、セクションのロックを解除しようとすると Configuration Manager で例外がスローされます。 したがって、<modules> セクションを指定しないでアプリを展開します。

  3. web.config<modules> セクションのロックを解除します。 [接続] サイド バーの [サイト] で Web サイトを選びます。 [管理] 領域で構成エディターを開きます。 ナビゲーション コントロールを使って、system.webServer/modules セクションを選びます。 右側の [アクション] サイド バーで、セクションの [ロック解除] を選びます。 モジュール セクションのアクション エントリが [セクションのロック] と表示される場合、モジュール セクションのロックは既に解除されています。必要な操作はありません。

  4. アプリのローカル web.config ファイルに <modules> セクションを追加するとき、<remove> 要素を指定するとアプリからモジュールが取り除かれます。 複数のモジュールを削除するには、複数の <remove> 要素を追加します。 サーバー上で web.config を変更した場合は、すぐにプロジェクトのローカルな web.config ファイルに対して同じ変更を行ってください。 この手法でモジュールを削除すると、サーバー上の他のアプリでのモジュールの使用に影響がありません。

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

web.config を利用して IIS Express のモジュールを追加または削除するには、<modules> セクションのロックを解除するには、applicationHost.config を変更します。

  1. {APPLICATION ROOT}\.vs\config\applicationhost.config を開きます。

  2. IIS モジュールの <section> 要素を見つけ、overrideModeDefaultDeny から Allow に変更します。

    <section name="modules"
             allowDefinition="MachineToApplication"
             overrideModeDefault="Allow" />
    
  3. <location path="" overrideMode="Allow"><system.webServer><modules> セクションを見つけます。 削除するモジュールに対して、lockItemtrue から false に設定します。 次の例では、CGI モジュールのロックが解除されています。

    <add name="CgiModule" lockItem="false" />
    
  4. <modules> セクションと個々のモジュールのロックが解除されたら、IIS Express でアプリを実行するためのアプリの web.config ファイルを利用し、IIS モジュールを自由に追加したり、削除したりできます。

IIS モジュールは、Appcmd.exe を使って削除することもできます。 コマンドで MODULE_NAMEAPPLICATION_NAME を指定します。

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

たとえば、Default Web Site から DynamicCompressionModule を削除するには、次のようにします。

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

最小限のモジュール構成

ASP.NET Core アプリを実行するために必要なモジュールは、匿名認証モジュールと ASP.NET Core モジュールだけです。

URI キャッシュ モジュール (UriCacheModule) により、IIS は URL レベルで Web サイトの構成をキャッシュできます。 このモジュールがない場合、同じ URL が繰り返し要求された場合でも、IIS はすべての要求で構成を読み取って解析する必要があります。 すべての要求で構成を解析すると、パフォーマンスが大幅に低下します。 URI キャッシュ モジュールはホストされた ASP.NET Core アプリを実行するために厳密には必要ありませんが、すべての ASP.NET Core の展開で URI キャッシュ モジュールを有効にすることをお勧めします。

HTTP キャッシュ モジュール (HttpCacheModule) は、IIS 出力キャッシュと共に、HTTP.sys キャッシュ内のアイテムをキャッシュするためのロジックも実装します。 このモジュールがないと、コンテンツはカーネル モードでキャッシュされなくなり、キャッシュ プロファイルは無視されます。 HTTP キャッシュ モジュールを削除すると、通常、パフォーマンスとリソースの使用に悪影響があります。 HTTP キャッシュ モジュールはホストされた ASP.NET Core アプリを実行するために厳密には必要ありませんが、すべての ASP.NET Core の展開で HTTP キャッシュ モジュールを有効にすることをお勧めします。

その他の技術情報