ASP.NET customErrors mode="RemoteOnly" 模式下 , 指定IP 可以看到錯誤畫面 (加裝 IIS URL Rewrite Module方式)
原文是參考這篇 Troubleshoot ASP.NET Errors Remotely–while Appearing Local 由 Scott Forsyth 所分享 。
如果你的情境是需要直接看到原始碼的錯誤,而且要指定遠端指定的IP,可以透過 IIS URL Rewrite Module 模組方式來達成。
一般我們會在 ASP.NET 設定 <customErrors mode="RemoteOnly" /> ,所以在遠端的主機看到的錯誤畫面,
是篩選過的錯誤畫面。
1. 先下載 IIS URL Rewrite Module (連結) 。
2. 設定 web.Config . <customErrors mode="RemoteOnly" />
3. 進行 IIS URL Rewrite Module 設定。
他的運作原理是將指定的遠端IP,透過 URL Rewrite Module 將遠端的IP,在連線進來後改為 127.0.0.1 的方式,
用這個方法,來讓 ASP.NET 的 CustomeErrors Mode RemoteOnly 認為是本機IP 127.0.0.1 ,所以能顯示完整的錯誤畫面。進行 IIS URL Rewrite Module 設定前,這邊先用程式碼來觀察遠端的 IP
{ Response.Write(Request.ServerVariables["REMOTE_ADDR"]); }
可以觀察在還沒設定 IIS URL Rewrite Module ,登入過去的 IP 是 x.x.138.251,連線到 x.x.139.61 的網站。
接下來進行 IIS URL Rewrite Module 的設定,來觀察兩個不同的變化。
選擇網站 – URL Rewrite – Open Feature
選 View Server variables
新增 REMOTE_ADDR
Name : 自行命名
Pattern: .*
(這邊是要抓全部的比對)
Conditions – Add
Condition input: {REMOTE_ADDR}
PAttern: 你允許遠端的 IP
(這邊是使用 Regular Expression 的方式,所以可以依照你的實際狀況進行規則調整)
要改變的 Server Variable
REMOTE_ADDR
Value : 127.0.0.1
記得要打勾 Replace ,當是指定規則(IP)時,他會取代本來的 REMOTE_ADDR
最後 Action 設定 None ,這個範例單純是需要置換 REMOTE_ADDR 的變數,沒有要在進行其他的作業。
最後點選 Apply 後,剛所有的設定,最後其實都會記錄在 web.config 裡面,所以後續如果了解規則後,
其實是可以直接在 web.config 最設定。
4.驗證結果
在連線至遠端的主機,此時我們的 REMOTE_ADDR 已經取代為 127.0.0.1
錯誤頁面也能在指定的IP狀況下,看到詳細的錯誤畫面。
而原作 Troubleshoot ASP.NET Errors Remotely–while Appearing Local ,提到 URL Rewrite Module
不會影響到 IIS Log 實際記錄真實的IP。
結論:
這個方法適合沒有實作客製記錄或是很緊急的需要上線觀察某些狀況的時候,
建議還是制定客製記錄的方式,在搭配緊急時的這個方法,是正確讓系統運作的方式。
參考資源:
Troubleshoot ASP.NET Errors Remotely–while Appearing Local
中文 TechNet IIS 主題網站
IIS 7 URL Rewrite Module
Rich Custom Error Handling with ASP.NET