與 ASP.NET Core 搭配運作的 IIS 模組

您無法使用部分原生 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
No
設定驗證
ConfigurationValidationModule
Yes
HTTP 錯誤
CustomErrorModule
No 狀態碼頁面中介軟體
自訂記錄
CustomLoggingModule
Yes
預設文件
DefaultDocumentModule
No 預設檔案中介軟體
摘要式驗證
DigestAuthenticationModule
Yes
目錄瀏覽
DirectoryListingModule
No 目錄瀏覽中介軟體
動態壓縮
DynamicCompressionModule
Yes 回應壓縮中介軟體
失敗的要求追蹤
FailedRequestsTracingModule
Yes ASP.NET Core 記錄
檔案快取
FileCacheModule
No 回應快取中介軟體
HTTP 快取
HttpCacheModule
No 回應快取中介軟體
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
No
靜態壓縮
StaticCompressionModule
No 回應壓縮中介軟體
靜態內容
StaticFileModule
No 靜態檔案中介軟體
權杖快取
TokenCacheModule
Yes
URI 快取
UriCacheModule
Yes
URL 授權
UrlAuthorizationModule
Yes ASP.NET Core Identity
WebDav
WebDAV
No
Windows 驗證
WindowsAuthenticationModule
Yes

†由於目錄結構變更的緣故,因此「URL 重寫模組」的 isFileisDirectory 比對類型對 ASP.NET Core 應用程式沒有作用。

受控模組

當應用程式集區的 .NET CLR 版本已設定為 [沒有 Managed 程式碼] 時,受控模組對所裝載的 ASP.NET Core 應用程式「沒有」作用。 ASP.NET Core 在數種案例中都有提供中介軟體替代方案。

模組 ASP.NET Core 選項
AnonymousIdentification
DefaultAuthentication
FileAuthorization
FormsAuthentication Cookie驗證中介軟體
OutputCache 回應快取中介軟體
設定檔
RoleManager
ScriptModule-4.0
工作階段 工作階段中介軟體
UrlAuthorization
UrlMappingsModule URL 重寫中介軟體
UrlRoutingModule-4.0 ASP.NET Core 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 中的設定來移除模組,請先將模組解除鎖定,以及將 web.config<modules> 區段解除鎖定:

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

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

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

  4. <modules> 區段新增至具有 <remove> 元素的應用程式本機 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> 元素,並將 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> 區段及個別模組解除鎖定後,您可任意使用應用程式的 web.config 檔案新增或移除 IIS 模組,以在 IIS Express 上執行應用程式。

您也可以使用 Appcmd.exe 來移除 IIS 模組。 請在命令中提供 MODULE_NAMEAPPLICATION_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 快取模組」。

其他資源