web.config 是 IIS 和 ASP.NET Core 模組 所讀取的檔案,用來設定裝載于 IIS 的應用程式。

web.config 檔案位置

為了正確設定 ASP.NET Core 模組 web.config 檔案必須存在於已部署應用程式的 內容根 路徑 (通常是應用程式基底路徑)。 這是與提供給 IIS 的網站實體路徑相同的位置。 應用程式的根目錄需有 web.config 檔案,才能使用 Web Deploy 發行多個應用程式。

敏感性檔案存在於應用程式的實體路徑上,例如 {ASSEMBLY}.runtimeconfig.json {ASSEMBLY}.xml (XML 文件註解) 和 {ASSEMBLY}.deps.json ,其中預留位置 {ASSEMBLY} 是組件名稱。 當 web.config 檔案存在且網站正常啟動時,如果有人要求機密檔案,IIS 不會予以提供。 若 web.config 檔案遺失或沒有正確命名,或是無法設定網站以正常啟動,IIS 可能會公開提供機密檔案。

web.config 檔案必須持續存在於部署之中、已正確命名,並能夠設定網站以正常啟動。 無論在任何情況下,請都不要從生產環境部署移除 web.config 檔案。

如果專案中沒有 web.config 檔案,則系統會使用正確的 processPath arguments 建立該檔案以設定 ASP.NET Core 模組,並將該檔案移至 已發佈的輸出

如果專案中沒有 web.config 檔案,則系統會使用正確的 processPath arguments 轉換該檔案以設定 ASP.NET Core 模組,並將該檔案移至已發佈的輸出。 轉換不會修改檔案中的 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)

使用 設定 ASP.NET Core模組web.config

ASP.NET Core模組會設定 aspNetCore 為月臺檔案中節點的 web.config 區段 system.webServer

下列 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專案的屬性

disableStartUpErrorPage

選擇性的 Boolean 屬性。

如果為 true,則會隱藏 502.5 - 進程失敗 頁面,且 中設定的 web.config 502 狀態字碼頁優先。

false forwardWindowsAuthToken

選擇性的 Boolean 屬性。

如果為 true,則會將權杖轉送至每個要求接聽 %ASPNETCORE_PORT% 為標頭 'MS-ASPNETCORE-WINAUTHTOKEN' 的子進程。 該處理序需負責依據要求呼叫此權杖上的 CloseHandle。

hostingModel

選擇性字串屬性。

將裝載模型指定為同進程 (InProcess/inprocess) 或跨進程 () 。 OutOfProcess/outofprocess

OutOfProcess/outofprocess 不存在時 processesPerApplication

選擇性的整數屬性。

指定可在每個應用程式啟動之 processPath 設定中指定的進程實例數目。

†針對進程內裝載,此值限制為 1

不建議使用 processesPerApplication 設定。 此屬性將在未來版本中移除。

預設: 1
最小值:1
最大值: 100processPath

必要的字串屬性。

啟動接聽 HTTP 要求之處理序的可執行檔路徑。 支援相對路徑。 如果路徑的開頭為 .,該路徑即被視為網站根目錄的相對路徑。

rapidFailsPerMinute

選擇性的整數屬性。

指定中指定 processPath 進程允許每分鐘當機的次數。 如果超出此限制,模組就會在該分鐘的剩餘時間內停止啟動處理序。

不支援同處理序裝載。

預設: 10
最小值:0
最大值︰100 requestTimeout

選擇性的時間範圍屬性。

針對在 %ASPNETCORE_PORT% 進行接聽的處理序,指定 ASP.NET Core 模組等候回應的持續時間。

在 ASP.NET Core 2.1 或更新版本隨附的 ASP.NET Core 模組版本中,是以小時、分鐘及秒為單位來指定 requestTimeout

不適用於同處理序裝載。 針對同處理序裝載,該模組會等待應用程式處理要求。

字串之分鐘和秒數的有效值介於 0-59。 60在分鐘或秒的值中使用 會導致500 - 內部伺服器錯誤

預設: 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 則會將 中 processPath 指定的進程重新導向至 中指定的 stdoutLogFilestderr 檔案。

false stdoutLogFile

選擇性字串屬性。

指定要記錄中指定之進程的相對或絕對檔案路徑 stdoutstderrprocessPath 相對路徑是相對於網站的根目錄。 所有開頭為 . 的路徑都是網站根目錄的相對路徑,而所有其他路徑則視為絕對路徑。 建立記錄檔後,模組會建立路徑中提供的所有資料夾。 使用底線分隔符號,會將時間戳記、進程識別碼和副檔名 (.log) 新增至路徑的最後一 stdoutLogFile 個區段。 如果 .\logs\stdout 提供為值,範例 stdout 記錄檔會在 2018 年 2 月 5 日儲存在 2018 年 2 月 5 日時儲存為 stdout_20180205194132_1934.loglogs 1934:41:32。

aspnetcore-stdout

設定環境變數

您可以在 processPath 屬性中為處理序指定環境變數。 請使用 <environmentVariables> 集合元素的 <environmentVariable> 子元素來指定環境變數。 本節中所設定環境變數的優先順序會高於系統環境變數。

下列範例會在 中設定兩個 web.config 環境變數。 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

使用 設定 IIS web.config

IIS 組態會受到 <system.webServer> 使用 ASP.NET Core 模組 ASP.NET Core應用程式運作之 IIS 案例的 區段 web.config 所影響。 舉例來說,IIS 設定對動態壓縮有作用。 如果 IIS 在伺服器層級設定為使用動態壓縮, <urlCompression> 則應用程式 web.config 檔案中的 元素可以針對 ASP.NET Core應用程式停用它。

如需詳細資訊,請參閱下列主題:

  • 的組態參考 <system.webServer>
  • 適用於 IIS 的 ASP.NET Core 模組 (ANCM)
  • 與 ASP.NET Core 搭配運作的 IIS 模組
  • 若要為在隔離的應用程式集區中執行的個別應用程式設定環境變數, (IIS 10.0 或更新版本) 支援,請參閱AppCmd.exe IIS 參考檔中環境變數 <environmentVariables>主題的命令一節。

    的組態區段 web.config

    ASP.NET Core應用程式不會使用 ASP.NET web.config 4.x 應用程式的組態區段來進行設定:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>
  • 使用其他組態提供者設定的 ASP.NET Core 應用程式。 如需詳細資訊,請參閱組態

    轉換 web.config

    如果您需要在發佈時轉換 web.config,請參閱轉換 web.config。您可能需要在發佈時轉換 web.config,以根據組態、設定檔或環境來設定環境變數。

  • IIS < system.webServer>
  • 與 ASP.NET Core 搭配運作的 IIS 模組
  • 轉換 web.config
  •