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

禁止 IIS 靜態檔案快取 (png、js、html 等) 完整方案:Metabase.xml 目錄級與註冊表全域兩種模式

編輯:關於伺服器

背景與問題

IIS 為提升效能,預設在記憶體中快取靜態檔案 (js、css、png、html 等)。正常情況下檔案修改時間變更會自動失效快取,但高頻大量更新 (如每秒更新上萬張股票 K 線圖) 時,IIS 快取可能數十分鐘不更新,導致用戶看到舊內容。

設定 HTTP 標頭 Cache-Control: no-cache 僅影響瀏覽器端快取,無法清除 IIS 伺服器端記憶體快取 (回應狀態碼仍為 200,非 304)。

方案一:目錄級禁用快取 (修改 Metabase.xml) - 精準控制

  1. 開啟 IIS 管理員 → 右鍵伺服器節點 → 「屬性」 → 勾選 「允許直接編輯設定資料庫」 → 確定。
IIS 屬性:允許直接編輯設定資料庫

啟用 Metabase.xml 直接編輯權限

  1. 執行 notepad C:\WINDOWS\system32\inetsrv\MetaBase.xml 開啟設定檔。
  2. 搜尋目標虛擬目錄名稱,找到對應 <IIsWebVirtualDir> 區塊,例如:
<IIsWebVirtualDir Location ="/LM/W3SVC/1832041641/root/inc"
    AccessFlags="AccessRead | AccessScript"
    AppFriendlyName="inc"
    AppIsolated="2"
    AppRoot="/LM/W3SVC/1832041641/Root/inc"
    DirBrowseFlags="DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate | EnableDefaultDoc"
    Path="D:\publish\inc"
>
</IIsWebVirtualDir>
  1. 在該區塊內新增屬性:MD_VR_NO_CACHE="1"
<IIsWebVirtualDir Location ="/LM/W3SVC/1832041641/root/inc"
    ...
    MD_VR_NO_CACHE="1"
>
</IIsWebVirtualDir>
  1. 儲存檔案,執行 iisreset 重新啟動 IIS 即時生效。

方案二:全域禁用靜態檔案快取 (註冊表) - 一勞永逸

  1. 開啟註冊表編輯器 (regedit)。
  2. 導航至:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters
  3. 新增/修改 DWORD 值:
    名稱:DisableStaticFileCache
    數值:1 (0=啟用快取,1=禁用快取)。
  4. 若鍵值不存在請新建 DWORD (32 位元)。
  5. 重新啟動 IIS (iisreset) 生效。

注意事項與效能影響

  • 非必要勿全域禁用: 靜態檔案快取能大幅降低磁碟 I/O、提升回應速度,禁用後每次請求皆讀取磁碟,高併發下 CPU/磁碟壓力倍增。
  • 精準施策: 僅對極高頻更新目錄 (如即時圖表、動態生成靜態頁) 使用方案一 (Metabase.xml 目錄級)。
  • HTTP 快取標頭無效: IIS 伺服器端快取與瀏覽器端快取獨立,設定 Cache-Control、Expires 無法控制 IIS 記憶體快取。
  • IIS 7.0+ 替代方案: 使用 <system.webServer> <staticContent> <clientCache cacheControlMode="DisableCache" /> </staticContent> </system.webServer> 在 web.config 中目錄級禁用 (較 Metabase.xml 簡單)。
Copyright © Windows教程網 All Rights Reserved