IIS 錯誤頁面客製設定 (IIS Custom Erros, Error Pages)

2021-06-25

筆記區別 IIS 的錯誤頁面與 ASP.NET 的錯誤頁面,並說明如何從 IIS 進行設定,從而釐清錯誤的發生以及妥善的控制避免使用者觀看到詳細的錯誤訊息。

logo

說明

.NET 錯誤網頁, CustomErrors

這邊是指 ASP.NET 中發生的錯誤訊息該如何呈現,例如 MVC 框架中 Runtime 的錯誤。其中開啟模式是指遠端以及本機都使用客製錯誤訊息,預設的僅限遠端只有遠端或使用客製錯誤訊息,本機則會是詳細錯誤訊息。如果要在遠端呈現完整錯誤訊息,必須選擇關閉

ASP.NET 的錯誤類型包含 Route 找不到等。

觸發錯誤的方式:

https://sdwh.dev/a.aspx
https://sdwh.dev/a/a.aspx

設定的對應在 Web.config 的下列位置:

<system.web>
  <customErrors mode="On"/>
</system.web>

ASP.NET MVC 如何客製錯誤畫面 (Custom Error Page)

IIS 錯誤網頁, Error Pages

這邊是指 IIS Runtime 所發生的錯誤訊息該如何呈現,選項說明的很清楚。

IIS 的錯誤類包含靜態檔案找不到、執行 ASP / VBScript 所碰到的問題、Web.config 連結的資料庫錯誤等。

觸發錯誤的方式:

https://sdwh.dev/notexistsPath
https://sdwh.dev/1/2/3/
https://sdwh.dev/a.asp

設定的對應會在 Web.config 的下列位置:

<system.webServer>
    <httpErrors>
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" 
            path="/NotFound/SystemWebServer404.html" responseMode="ExecuteURL" />
    </httpErrors>
</system.webServer>

而 system.webServer 是從 IIS 7.0 以後才加入的功能,因此早於此版本的 IIS 並不支援此功能。

從 IIS 伺服器的版本對照所使用的 Windows Server OS

使用 Inetmgr 進行設定

使用 Web.config 進行設定

自訂錯誤網頁

<system.webServer>
    <httpErrors errorMode="Custom" />
</system.webServer>

詳細錯誤

<system.webServer>
    <httpErrors errorMode="Detailed" />
</system.webServer>

本機要求的詳細錯誤及遠端要求的自訂錯誤網頁

<system.webServer>
    <httpErrors errorMode="DetailedLocalOnly" />
</system.webServer>

參考資料

customErrors與httpErrors | 黑暗執行緒

system.webServer | MS Docs