開始前先了解
先完成可正常存取的 IIS 靜態網站. 本篇只產生首頁與不存在頁面的測試請求, 不刻意破壞正式應用程式.
IIS 記錄可能含用戶 IP, URI 與查詢參數. 不在 URL 放密碼或 token, 分享前檢查內容, 不把完整存取記錄放到公開目錄.
本系列使用 Windows Server 2022 Datacenter 繁體中文真實操作畫面. 帳號, 網路設定, 磁碟與示範數值請換成自己的環境; 選項名稱可能因版本與語言不同而異.
01找出網站 ID 與記錄位置
在 IIS 管理員選定站台, 查看"進階設定..."的 ID, 再開啟"記錄"核對格式與資料夾.
常見預設位置是 C:\inetpub\logs\LogFiles\W3SVC網站ID. 第一個自建站不一定是 W3SVC1, 必須以實際網站 ID 對上.
圖中使用內建 WebAdministration 模組讀取同一組站台設定, 本篇 FirstSite 的 ID 為 2.
Import-Module WebAdministration
Get-Website FirstSite | Select-Object Name,ID,State,PhysicalPath
(Get-Item IIS:\Sites\FirstSite).logFile |
Format-List logFormat,directory,enabled
放大圖片
02確認 W3C 欄位與時間
在"記錄"選 W3C 格式, 由"選取欄位..."核對日期, 時間, URI Stem, HTTP Status, HTTP Substatus, Win32 Status 及 Time Taken.
W3C 內容時間以 UTC 記錄, 排錯時要與伺服器顯示時區換算. 檔案輪替時間的選項不代表內容時戳改成當地時間.
Import-Module WebAdministration
(Get-Item IIS:\Sites\FirstSite).logFile |
Format-List logFormat,logExtFileFlags
Get-Date -Format o
(Get-Date).ToUniversalTime().ToString('o')
放大圖片
03產生正常與不存在頁面的請求
先開啟首頁確認成功, 再請求 /missing-demo.html 取得真實 404. 記下請求時間與路徑, 不需要修改網站程式製造 500.
404 表示這次請求沒有取得指定資源. 仍要看子狀態與網站設定, 不要只看到 404 就判定網路或主機故障.
放大圖片
04等待寫入並對照狀態碼
IIS 可能緩衝後才寫入記錄. 等待或由管理員執行 netsh http flush logbuffer, 再開啟該網站的最新記錄.
查看 #Fields: 標頭的欄位順序, 找到首頁的 200 與 missing-demo.html 的 404. 不要把空白分欄後的固定欄號套用到不同網站設定.
Get-ChildItem C:\inetpub\logs\LogFiles\W3SVC* -Filter *.log -Recurse |
Sort-Object LastWriteTime -Descending |
Select-Object -First 5 FullName,LastWriteTime
放大圖片
05決定下一個檢查位置
404 可先核對路徑及預設文件, 權限相關狀態再核對執行身分與 NTFS 權限, 應用程式錯誤則比對事件檢視器與應用記錄.
保留問題前後的必要範圍即可. time-taken 的單位是毫秒, 可能包含網路等待, 不等於使用者整段上網體驗或純 CPU 耗時; 不要為排錯對外開啟詳細錯誤或刪除原記錄.
放大圖片
完成後如何確認
已找到自建站的正確記錄資料夾, 並從實際記錄對照出 200 與 404. 後續排查可帶上時間, URI, 狀態與子狀態, 而不是只說網站不能開.
常見問題
檔案沒有立刻出現, 代表沒有收到請求嗎?
不一定. 可能尚未寫入, 記錄未啟用或查看了另一個網站 ID. 先核對設定與等待寫入, 再判斷請求是否抵達.