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

これは、この記事の最新バージョンではありません。 現在のリリースについては、 この記事の .NET 10 バージョンを参照してください。

警告

このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、 .NET および .NET Core サポート ポリシーを参照してください。 現在のリリースについては、 この記事の .NET 10 バージョンを参照してください。

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

ネイティブ モジュール

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

モジュール 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 では、いくつかのケースにおいてミドルウェアの代替機能が提供されています。

モジュール ASP.NET Core のオプション
匿名識別
既定の認証
ファイル認可
FormsAuthentication Cookie 認証ミドルウェア
OutputCache 応答キャッシュ ミドルウェア
プロフィール
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 リダイレクト モジュールは、<httpRedirect> 要素を使って無効にできます。

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

構成設定を使用してモジュールを無効にする方法の詳細については、IIS <system.webServer>子要素 セクションにあるリンクを参照してください。

モジュールの削除

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

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

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

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

  4. アプリのローカル <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 キャッシュ モジュールを有効にすることをお勧めします。

その他のリソース