與 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
Yes
基本驗證
BasicAuthenticationModule
Yes
用戶端憑證映射驗證
CertificateMappingAuthenticationModule
Yes
CGI
CgiModule
否
設定驗證
ConfigurationValidationModule
Yes
HTTP 錯誤
CustomErrorModule
否 狀態碼頁中介軟體
自訂記錄
CustomLoggingModule
Yes
預設文件
DefaultDocumentModule
否 預設檔案中介軟體
摘要式驗證
DigestAuthenticationModule
Yes
目錄瀏覽
DirectoryListingModule
否 目錄瀏覽中介軟體
動態壓縮
DynamicCompressionModule
Yes 回應壓縮中介軟體
失敗請求追蹤
FailedRequestsTracingModule
Yes ASP.NET Core 記錄
檔案快取
FileCacheModule
否 回應快取中介軟體
HTTP 快取
HttpCacheModule
否 回應快取中介軟體
HTTP 記錄
HttpLoggingModule
Yes ASP.NET Core 記錄
HTTP 重新導向
HttpRedirectionModule
Yes URL 重寫中介軟體
HTTP 追蹤
TracingModule
Yes
IIS 用戶端憑證對應驗證
IISCertificateMappingAuthenticationModule
Yes
IP 及網域限制
IpRestrictionModule
Yes
ISAPI 篩選器
IsapiFilterModule
Yes 中介軟體
ISAPI
IsapiModule
Yes 中介軟體
通訊協定支援
ProtocolSupportModule
Yes
要求篩選
RequestFilteringModule
Yes URL 重寫中介軟體 IRule
請求監視器
RequestMonitorModule
Yes
URL 重寫†
RewriteModule
Yes URL 重寫中介軟體
伺服器端包含
ServerSideIncludeModule
否
靜態壓縮
StaticCompressionModule
否 回應壓縮中介軟體
靜態內容
StaticFileModule
否 靜態檔案中介軟體
權杖快取
TokenCacheModule
Yes
URI 快取
UriCacheModule
Yes
URL 授權
UrlAuthorizationModule
Yes ASP.NET 核心 Identity
WebDav
WebDAV
否
Windows 驗證
WindowsAuthenticationModule
Yes

†由於 目錄結構的變更,「URL 重寫模組」的 isFile 和 isDirectory 比對類型無法搭配 ASP.NET Core 應用程式運作。

受控模組

當應用程式集區的 .NET CLR 版本設為 無受控程式碼 時,受控模組對託管的 ASP.NET Core 應用程式無法運作。 ASP.NET Core 在數種案例中都有提供中介軟體替代方案。

模組 ASP.NET Core 選項
匿名識別
預設驗證
檔案授權
表單驗證 Cookie 認證中介軟體
OutputCache 回應快取中介軟體
個人檔案
RoleManager
ScriptModule-4.0
工作階段 會話中介軟體
UrlAuthorization
UrlMappingsModule URL 重寫中介軟體
UrlRoutingModule-4.0 ASP.NET 核心 Identity
WindowsAuthentication

IIS 管理員應用程式變更

使用「IIS 管理員」來進行設定時,會變更應用程式的 web.config 檔案。 如果部署應用程式並包含 web.config,則所部署的 web.config 檔案會覆寫使用「IIS 管理員」來進行的所有變更。 對伺服器的 web.config 檔案進行變更後,請立即將伺服器上已更新的 web.config 檔案複製到本機專案。

停用 IIS 模組

如果在必須針對應用程式停用的伺服器層級設定了 IIS 模組,只要在應用程式的 web.config 檔案中新增設定,即可停用該模組。 請將模組留在原處,然後使用組態設定 (如果有的話) 來停用它,或是從應用程式移除模組。

模組停用

許多模組都有提供可將模組停用而無須從應用程式中移除的組態設定。 這是停用模組的最簡便快速方式。 例如,可以在 web.config 中使用 <httpRedirect> 元素來停用 HTTP 重新導向模組:

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

如需有關使用組態設定停用模組的詳細資訊,請依照 IIS <system.webServer> 的 子元素 一節中的連結。

模組移除

如果選擇透過 web.config 中的設定來移除模組,請先將模組解除鎖定,以及將 <modules> 的 區段解除鎖定:

  1. 在伺服器層級解除鎖定該模組。 在 IIS 管理員的 連線 側邊欄中,選取 IIS 伺服器。 開啟 [IIS] 區域中的 [模組]。 選取清單中的模組。 在右邊的 [動作] 資訊看板上,選取 [解除鎖定]。 若模組的動作項目顯示為鎖定,就代表該模組已經解除鎖定,且不需要任何動作。 將您打算稍後從 web.config 移除的模組都解除鎖定。

  2. 在 <modules> 不含 區段的情況下部署應用程式。如果在 web.config 包含 <modules> 區段的情況下部署應用程式,但未先在「IIS 管理員」中將該區段解除鎖定,則當「設定管理員」嘗試將該區段解除鎖定時就會擲回例外狀況。 因此,請在沒有 <modules> 區段的情況下部署應用程式。

  3. 將 web.config 的 <modules> 區段解除鎖定。在 連線 側邊欄中,選取 站台 中的網站。 在 [管理] 區域中,開啟 [設定編輯器]。 使用導覽控制項來選取 system.webServer/modules 區段。 在右側的 動作 側邊欄中,選取 解除鎖定 以將該區段解鎖。 若模組區段的動作項目顯示為鎖定區段,就代表該模組區段已經解除鎖定,且不需要任何動作。

  4. 將包含 <remove> 元素的 <modules> 區段新增至應用程式本機的 web.config 檔案中,以將該模組從應用程式中移除。 新增多個 <remove> 元素以移除多個模組。 如果已在伺服器上進行 web.config 變更,請立即在本機對專案的 web.config 檔案進行相同的變更。 使用此方法移除模組不會影響模組與伺服器上其他應用程式的搭配使用。

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

若要使用 web.config 對 IIS Express 新增或移除模組,請修改 applicationHost.config 以解除鎖定 <modules> 區段:

  1. 開啟 {APPLICATION ROOT}\.vs\config\applicationhost.config。

  2. 找出 IIS 模組的 <section> 元素,並將 overrideModeDefault 從 Deny 變更為 Allow:

    <section name="modules"
             allowDefinition="MachineToApplication"
             overrideModeDefault="Allow" />
    
  3. 找出 <location path="" overrideMode="Allow"><system.webServer><modules> 區段。 對於您要移除的任何模組,請將 lockItem 從 true 變更為 false。 以下為將 CGI 模組解除鎖定的範例:

    <add name="CgiModule" lockItem="false" />
    
  4. 在將 <modules> 區段及個別模組解除鎖定後,您可任意使用應用程式的 web.config 檔案新增或移除 IIS 模組,以在 IIS Express 上執行應用程式。

您也可以使用 Appcmd.exe 來移除 IIS 模組。 請在命令中提供 MODULE_NAME 和 APPLICATION_NAME:

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

例如,從預設網站中移除 DynamicCompressionModule:

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

最基本的模組設定

執行 ASP.NET Core 應用程式只需「匿名驗證模組」和「ASP.NET Core 模組」這兩個模組。

「URI 快取模組」(UriCacheModule) 可讓 IIS 快取 URL 層級的網站設定。 如果沒有此模組,IIS 就必須針對每個要求都讀取並剖析設定,即使是重複要求相同的 URL 時也一樣。 每次請求都解析設定,會造成顯著的效能損耗。 雖然不一定要有「URI 快取模組」,所裝載的 ASP.NET Core 應用程式就能執行,但建議您為所有 ASP.NET Core 部署都啟用「URI 快取模組」。

HTTP 快取模組 (HttpCacheModule) 實作了 IIS 輸出快取,以及將項目快取於 HTTP.sys 快取中的邏輯。 如果沒有此模組,就不會再以核心模式快取內容,而且會忽略快取設定檔。 移除「HTTP 快取模組」通常會對效能和資源使用情況造成負面影響。 雖然不一定要有「HTTP 快取模組」,所裝載的 ASP.NET Core 應用程式就能執行,但建議您為所有 ASP.NET Core 部署都啟用「HTTP 快取模組」。

其他資源