web.config ファイル

注意

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

警告

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

web.config は、IIS でホストされているアプリを構成するために、IIS と ASP.NET Core Module によって読み取られたファイルです。

web.config ファイルの場所

ASP.NET Core モジュールを正しく設定するためには、web.config ファイルが、展開されるアプリのコンテンツ ルート パス (通常はアプリ ベース パス) に存在する必要があります。 これは、IIS に提供される web サイトの物理パスと同じ場所です。 web.config ファイルは、Web 配置を使用して複数のアプリの発行を有効にするため、アプリのルートで必要です。

アプリの物理パスには、{ASSEMBLY}.runtimeconfig.json{ASSEMBLY}.xml (XML ドキュメントのコメント)、{ASSEMBLY}.deps.json (プレースホルダー {ASSEMBLY} はアセンブリ名) などの機密性の高いファイルが存在します。 web.config ファイルが存在し、サイトは通常どおり起動した場合、IIS は、これらの機密性の高いファイルが要求された場合にファイルを提供しません。 web.config ファイルが見つからない、名前が正しくない、または通常の起動用にサイトを構成できない場合、IIS は機密ファイルをパブリックに提供する可能性があります。

web.config ファイルは、展開環境に常に存在して、適切な名前が付けられている必要があり、また、通常の起動用にサイトを構成できる必要があります。 web.config ファイルを運用環境の展開から削除しないでください。

プロジェクト内に web.config ファイルが存在しない場合、そのファイルは ASP.NET Core モジュールを構成するための適切な processPatharguments を使用して作成され、公開された出力に移動されます。

プロジェクトに web.config ファイルが含まれていない場合、そのファイルは ASP.NET Core モジュールを構成するための正しい processPatharguments を使用して作成され、発行された出力に移行されます。 変換によりファイル内の IIS 構成の設定が変わることはありません。

web.config ファイルには、アクティブな IIS モジュールを制御する追加の IIS 構成設定が用意されている場合があります。 ASP.NET Core アプリで要求を処理できる IIS モジュールについては、IIS モジュールに関する記事を参照してください。

MSBuild ターゲット (_TransformWebConfig) は、プロジェクトの発行時に web.config ファイルの作成、変換、発行を処理します。 このターゲットは、Web SDK ターゲット (Microsoft.NET.Sdk.Web) に存在します。 SDK は、プロジェクト ファイルの先頭で設定されています。

<Project Sdk="Microsoft.NET.Sdk.Web">

Web SDK によって web.config ファイルが変換されないようにするため、<IsTransformWebConfigDisabled> プロパティをプロジェクト ファイルで使用します。

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Web SDK でファイルの変換を無効にする場合、開発者は手動で processPathargumentsを設定する必要があります。 詳細については、「IIS の ASP.NET Core モジュール (ANCM)」を参照してください。

web.config を使用した ASP.NET Core モジュールの構成

ASP.NET Core モジュールは、サイトの aspNetCore ファイルの system.webServer ノードの web.config セクションを使って構成します。

次に示す web.config ファイルは、フレームワークに依存する展開用に発行されたもので、サイトの要求を処理するように ASP.NET Core モジュールを構成します。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet"
                  arguments=".\MyApp.dll"
                  stdoutLogEnabled="false"
                  stdoutLogFile=".\logs\stdout"
                  hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

次の web.config は、自己完結型デプロイメント用に発行されたものです。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\MyApp.exe"
                  stdoutLogEnabled="false"
                  stdoutLogFile=".\logs\stdout"
                  hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

InheritInChildApplications プロパティは、false に設定されます。これは、<location> 要素内で指定された設定が、アプリのサブディレクトリにあるアプリによって継承されないことを示します。

アプリが Azure App Service に対して展開されると、stdoutLogFile パスは \\?\%home%\LogFiles\stdout に設定されます。 パスは stdout ログを LogFiles フォルダーに保存します。これは、サービスによって自動的に作成される場所です。

IIS サブアプリケーション構成について詳しくは、詳細な構成に関する記事を参照してください。

aspNetCore 要素の属性

属性 説明 デフォルト
arguments

省略可能な文字列属性。

processPath において指定されている実行可能ファイルへの引数です。

disableStartUpErrorPage

省略可能な Boolean 属性です。

true の場合、502.5 - 処理エラー ページは抑制され、web.config で構成されている 502 状態コード ページが優先されます。

false
forwardWindowsAuthToken

省略可能な Boolean 属性です。

true の場合、トークンは、%ASPNETCORE_PORT% 上でリッスンしている子プロセスに、要求ごとの 'MS-ASPNETCORE-WINAUTHTOKEN' ヘッダーとして転送されます。 要求ごとのこのトークンで CloseHandle を呼び出すのは、そのプロセスの役割です。

true
hostingModel

省略可能な文字列属性。

ホスティング モデルをインプロセス (InProcess/inprocess) またはアウト プロセス (OutOfProcess/outofprocess) として指定します。

存在しない場合は OutOfProcess/outofprocess
processesPerApplication

省略可能な整数属性

アプリごとにスピンアップすることができる processPath 設定内で指定したプロセスのインスタンス数が指定されます。

†インプロセス ホスティングの場合、値は 1 に制限されます。

設定 processesPerApplication は推奨されません。 この属性は将来のリリースで削除されます。

既定値: 1
最小値: 1
最大値: 100
processPath

必須の文字列属性です。

HTTP 要求をリッスンするプロセスを起動する実行可能ファイルへのパスです。 相対パスがサポートされています。 パスが . で始まる場合、パスはサイトのルートを基準とする相対パスであると見なされます。

rapidFailsPerMinute

省略可能な整数属性

processPath で指定されているプロセスが 1 分間にクラッシュできる回数を指定します。 この制限を超えた場合、モジュールは、1 分間の残りの間、プロセスの起動を停止します。

インプロセス ホスティングではサポートされていません。

既定値: 10
最小値: 0
最大値: 100
requestTimeout

省略可能な期間属性。

ASP.NET Core モジュールが %ASPNETCORE_PORT% でリッスンしているプロセスからの応答を待つ期間を指定します。

ASP.NET Core 2.1 以降のリリースに付属する ASP.NET Core モジュールのバージョンでは、requestTimeout は時間、分、および秒単位で指定します。

インプロセス ホスティングには適用されません。 インプロセス ホスティングの場合、アプリによって要求が処理されるまでモジュールは待機します。

文字列において、有効な分および秒の値は0から59の範囲です。 分または秒の値に 60 を入れると "500 - 内部サーバー エラー" が表示されます。60

既定値: 00:02:00
最小値: 00:00:00
最大値: 360:00:00
shutdownTimeLimit

省略可能な整数属性

app_offline.htm ファイルが検出されたときに、モジュールが実行可能ファイルの正常なシャットダウンを待機する秒単位の期間です。

既定値: 10
最小値: 0
最大値: 600
startupTimeLimit

省略可能な整数属性

ポートでリッスンするプロセスを実行可能ファイルが開始するのをモジュールが待機する秒単位の期間です。 この制限時間を超えた場合、モジュールはプロセスを強制終了します。

"インプロセスでホスティングしている場合: プロセスは再起動されず、設定を使用しませんrapidFailsPerMinute。"

"アウト プロセス" でホスティングしている場合: 最後のローリング分においてアプリが rapidFailsPerMinute 回だけ開始を失敗しているのでないかぎり、モジュールは、新しい要求を受け取るとプロセスの再起動を試み、それ以降に受信した要求に対してプロセスの再起動を試み続けます。

値 0 (ゼロ) は無限のタイムアウトと見なされません

既定値: 120
最小値: 0
最大値: 3600
stdoutLogEnabled

省略可能な Boolean 属性です。

true の場合、stdout で指定されているプロセスの stderrprocessPath は、stdoutLogFile で指定されているファイルにリダイレクトされます。

false
stdoutLogFile

省略可能な文字列属性。

stdout で指定されているプロセスからの stderrprocessPath がログに記録される相対ファイル パスまたは絶対ファイル パスを指定します。 サイトのルートを基準とした相対パスです。 . で始まっているパスはすべてサイト ルートに対する相対パスであり、他のすべてのパスは絶対パスとして扱われます。 モジュールは、ログ ファイルの作成時にパスに指定されたすべてのフォルダーを作成します。 アンダースコアの区切り記号を使って、タイムスタンプ、プロセス ID、およびファイル拡張子 ( .log) が、stdoutLogFile パスの最後のセグメントに追加されます。 たとえば、値として .\logs\stdout を指定し、2018 年 2 月 5 日の 19:41:32 にプロセス ID 1934 で保存すると、stdout ログは stdout_20180205194132_1934.log フォルダーに logs として保存されます。

aspnetcore-stdout

環境変数を設定する

processPath 属性で、プロセスに対する環境変数を指定できます。 <environmentVariable> コレクション要素の <environmentVariables> 子要素で、環境変数を指定します。 このセクションで設定された環境変数は、システム環境変数より優先されます。

次の例では、web.config 内に 2 つの環境変数が設定されています。 ASPNETCORE_ENVIRONMENT は、Development に対するアプリの環境を構成します。 開発者は、アプリの例外をデバッグするときに開発者web.configを強制的に読み込むために、 ファイルにこの値を一時的に設定できます。 CONFIG_DIR はユーザー定義の環境変数の例です。開発者はここに、アプリの構成ファイルを読み込むためのパスを形成するために起動時に値を読み取るコードを記述してあります。

<aspNetCore processPath="dotnet"
      arguments=".\MyApp.dll"
      stdoutLogEnabled="false"
      stdoutLogFile=".\logs\stdout"
      hostingModel="inprocess">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
    <environmentVariable name="CONFIG_DIR" value="f:\application_config" />
  </environmentVariables>
</aspNetCore>

注意

web.config 内で環境を直接設定する代わりに、<EnvironmentName> プロパティを 発行プロファイル (.pubxml) またはプロジェクト ファイルに含めることができます。 この方法では、プロジェクトが発行されるときに web.config に環境が設定されます。

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

警告

インターネットなどの信頼されていないネットワークにアクセスできないステージング サーバーやテスト サーバーでは、ASPNETCORE_ENVIRONMENT 環境変数を Development に設定するだけです。

web.config を使用した IIS の構成

IIS の構成は ASP.NET Core モジュールを使用した ASP.NET Core アプリで機能する IIS シナリオの <system.webServer>web.config セクションによる影響を受けます。 たとえば、IIS の構成は動的な圧縮で機能します。 IIS が動的な圧縮を使用するようにサーバー レベルで構成されている場合、アプリの <urlCompression> ファイルの web.config 要素を使用すると、それを ASP.NET Core アプリに対して無効にすることができます。

詳細については、次の記事を参照してください。

分離されたアプリ プール (IIS 10.0 以降でサポートされている) で実行されている個々のアプリの環境変数を設定するには、IIS リファレンス ドキュメントの環境変数AppCmd.exe記事の<environmentVariables> コマンド セクションを参照してください。

web.config の構成セクション

web.config の ASP.NET 4.x アプリの構成セクションは、ASP.NET Core アプリの構成では使用されません。

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

ASP.NET Core アプリは、他の構成プロバイダーを使用して構成されます。 詳細については、構成に関するページを参照してください。

web.config を変換する

発行時に web.config を変換する必要がある場合は、「web.config の変換」を参照してください。構成、プロファイル、環境に基づいて環境変数を設定するために、発行時に web.config を変換する必要がある場合があります。

その他のリソース