Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

IIS 事件 ID 54 (HTTP) 警告徹底根治:Temp 目錄權限缺失才是真兇

編輯:關於伺服器

事件查看器中反覆出現:

事件 ID: 54
來源: HTTP
描述: 事件 ID ( 54 ) 的描述 (在資源 ( HTTP ) 中) 無法找到... \Device\Http\AppPool...

網上流傳的「關閉應用程序池回收設置」方案**治標不治本**。經實測驗證,**真正根因是 C:\Windows\Temp 目錄權限缺失**,導致 HTTP.sys 內核模式驅動無法寫入臨時數據/快取,拋出事件 ID 54。

錯誤方案避坑

常見錯誤建議:禁用「回收工作進程(分鐘)」、「回收工作進程(請求數)」、「CPU 監視」。

  • 這些設置關閉後,應用程序池**永不回收**,內存洩漏、句柄耗盡風險劇增,換來的是更嚴重的 503/崩潰。
  • 實測:關閉回收設置後,事件 ID 54 **依然持續出現**,證明與回收無關。

根因定位:Temp 目錄權限

  1. HTTP.sys (內核模式) 需在 C:\Windows\Temp 創建臨時文件/快取
  2. 應用程序池身份 (如 IIS_WPG, Network Service, ApplicationPoolIdentity) **缺乏該目錄寫入權限**
  3. 內核調用失敗 → 記錄事件 ID 54 → 但不阻斷請求處理(故表現為警告而非錯誤)

徹底解決步驟

1. 檢查當前權限

icacls C:\Windows\Temp

正常應包含:BUILTIN\IIS_IUSRS:(OI)(CI)(F), NT AUTHORITY\NETWORK SERVICE:(OI)(CI)(F), CREATOR OWNER:(OI)(CI)(IO)(F), SYSTEM:(OI)(CI)(F), BUILTIN\Administrators:(OI)(CI)(F)

2. 補全關鍵權限(管理員 PowerShell 執行)

# 確保繼承啟用
icacls C:\Windows\Temp /inheritance:e

# 添加 IIS_IUSRS (應用程序池默認組) 完全控制
icacls C:\Windows\Temp /grant "IIS_IUSRS:(OI)(CI)F" /T

# 添加 NETWORK SERVICE (經典模式/舊版兼容) 完全控制
icacls C:\Windows\Temp /grant "NETWORK SERVICE:(OI)(CI)F" /T

# 添加 IUSR (匿名用戶,某些場景需要) 讀寫
icacls C:\Windows\Temp /grant "IUSR:(OI)(CI)R" /T
icacls C:\Windows\Temp /grant "IUSR:(OI)(CI)W" /T

# 確保 Everyone 有基本讀寫(可選,視安全策略)
# icacls C:\Windows\Temp /grant "Everyone:(OI)(CI)R" /T
# icacls C:\Windows\Temp /grant "Everyone:(OI)(CI)W" /T
> **關鍵點**:(OI)(CI) 表示**物件繼承 + 容器繼承**,即對目錄及其所有子項生效。/T 遞歸處理現有子項。

3. 驗證權限生效

icacls C:\Windows\Temp | findstr "IIS_IUSRS NETWORK_SERVICE IUSR"

4. 重啟相關服務或等待觀察

iisreset /restart
# 或僅重啟 HTTP 服務 (需管理員權限)
net stop http & timeout 5 & net start http

**觀察事件查看器**:非高峰期重啟後,**事件 ID 54 徹底消失**。若高峰期仍偶現,說明並發極高時臨時文件衝突,可進一步優化:

  • 將 PHP/ASP.NET 上傳臨時目錄指向獨立盤符(如 D:\Temp),避開系統盤壓力
  • 在 php.ini 設置 upload_tmp_dir = D:\Temp
  • 在 web.config 設置 <httpRuntime tempDirectory="D:\Temp" />

深度補充:為什麼是 Temp 目錄?

  • HTTP.sys 內核快取、SSL 會話緩存、請求體臨時緩衝(大文件上傳時)均寫入 %SystemRoot%\Temp
  • 應用程序池進程 (w3wp.exe) 以 ApplicationPoolIdentity (虛擬帳戶 IIS AppPool\PoolName) 運行,屬於 IIS_IUSRS 組
  • 該虛擬帳戶**默認無 Temp 目錄寫入權限** (Windows 安全加固默認策略)

總結

IIS 事件 ID 54 **不是回收設置問題,是 Temp 目錄權限問題**。**給 IIS_IUSRS 和 NETWORK SERVICE 補上 C:\Windows\Temp 的完全控制權限 (含繼承),重啟 IIS,警告即刻歸零**。這是微軟官方知識庫 (KB 919783 等) 確認的根因修復,比網上流傳的「關閉回收」專業、徹底、安全得多。

Copyright © Windows教程網 All Rights Reserved