如何禁止IIS緩衝靜態檔案(png,js,html等))

來源:互聯網
上載者:User

禁止IIS緩衝靜態檔案(png,js,html等)背景:
IIS為了提高效能,預設情況下會對靜態檔案js,html,gif,png等做內部緩衝,這個緩衝是在伺服器iis進程的記憶體中的。IIS這麼做在很大程度上可以提高靜態檔案的訪問效能,在正常情況下只要靜態檔案更新了IIS也會更新緩衝。但是如果更新的靜態檔案很多就有可能出現緩衝不更新的情況。

彎路:
我遇到這樣一個情境,伺服器迴圈更新上萬張股票行情圖片,IIS也會對圖片進行緩衝,由於更新的頻率很高,檔案很多,就出現了IIS快取檔案超過幾十分鐘都無法更新的情況。

這時候直覺是瀏覽器對檔案進行了緩衝,於是就在IIS的目錄上設定Http頭:Cache-Control:no-cache,但是無濟於事,瀏覽器請求伺服器端得到的狀態號是200,這可以說明瀏覽器確實是從伺服器端得到了新的內容,而非讀取瀏覽器本機快取。

如何禁止IIS緩衝靜態檔案(png,js,html等):
通過設定Http頭不讓瀏覽器緩衝的方法在這個情境下是行不通的,因為緩衝不是出現的用戶端,而是出現在IIS伺服器上;所以解決問題還需要從IIS本身入手,通過配置Metabase.xml檔案禁止IIS緩衝相應目錄下的靜態檔案。

1. 首先需要設定IIS允許運行時編輯Metabase.xml檔案

開啟IIS,然後開啟IIS屬性頁面,勾選上“允許直接編輯設定資料庫”選項

2. 在運行中輸入notepad c:\WINDOWS\system32\inetsrv\MetaBase.xml 開啟IIS設定檔

3. 在檔案中搜尋要配置禁止緩衝的虛擬目錄名字,找到類似如下配置節
<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>

在IIsWebVirtualDir配置節中添加 MD_VR_NO_CACHE=”1“ 屬性

4. 儲存設定檔,重啟IIS即可。

如果想設定管理員上的所有網站都禁用IIS緩衝可以通過修改註冊表實現:
編輯註冊表中的   DisableStaticFileCache值,0為啟用,1為禁用   ,該索引值的位置位於:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters
如果該鍵不存在可以建立。

注意事項:

通常情況下我們並不需要禁用IIS的靜態檔案快取,iis會自動根據靜態檔案的修改時間自動更新緩衝;只有在你遇到非常情況下才有必要禁用IIS緩衝。IIS緩衝和Http緩衝相關頭沒有任何關係,在IIS上加緩衝頭沒有辦法清除掉IIS對靜態檔案的緩衝。

請尊重作者的勞動,轉載請保留連結 玉開的技術部落格

禁止IIS緩衝靜態檔案(png,js,html等)背景:
IIS為了提高效能,預設情況下會對靜態檔案js,html,gif,png等做內部緩衝,這個緩衝是在伺服器iis進程的記憶體中的。IIS這麼做在很大程度上可以提高靜態檔案的訪問效能,在正常情況下只要靜態檔案更新了IIS也會更新緩衝。但是如果更新的靜態檔案很多就有可能出現緩衝不更新的情況。

彎路:
我遇到這樣一個情境,伺服器迴圈更新上萬張股票行情圖片,IIS也會對圖片進行緩衝,由於更新的頻率很高,檔案很多,就出現了IIS快取檔案超過幾十分鐘都無法更新的情況。

這時候直覺是瀏覽器對檔案進行了緩衝,於是就在IIS的目錄上設定Http頭:Cache-Control:no-cache,但是無濟於事,瀏覽器請求伺服器端得到的狀態號是200,這可以說明瀏覽器確實是從伺服器端得到了新的內容,而非讀取瀏覽器本機快取。

如何禁止IIS緩衝靜態檔案(png,js,html等):
通過設定Http頭不讓瀏覽器緩衝的方法在這個情境下是行不通的,因為緩衝不是出現的用戶端,而是出現在IIS伺服器上;所以解決問題還需要從IIS本身入手,通過配置Metabase.xml檔案禁止IIS緩衝相應目錄下的靜態檔案。

1. 首先需要設定IIS允許運行時編輯Metabase.xml檔案

開啟IIS,然後開啟IIS屬性頁面,勾選上“允許直接編輯設定資料庫”選項

2. 在運行中輸入notepad c:\WINDOWS\system32\inetsrv\MetaBase.xml 開啟IIS設定檔

3. 在檔案中搜尋要配置禁止緩衝的虛擬目錄名字,找到類似如下配置節
<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>

在IIsWebVirtualDir配置節中添加 MD_VR_NO_CACHE=”1“ 屬性

4. 儲存設定檔,重啟IIS即可。

如果想設定管理員上的所有網站都禁用IIS緩衝可以通過修改註冊表實現:
編輯註冊表中的   DisableStaticFileCache值,0為啟用,1為禁用   ,該索引值的位置位於:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters
如果該鍵不存在可以建立。

注意事項:

通常情況下我們並不需要禁用IIS的靜態檔案快取,iis會自動根據靜態檔案的修改時間自動更新緩衝;只有在你遇到非常情況下才有必要禁用IIS緩衝。IIS緩衝和Http緩衝相關頭沒有任何關係,在IIS上加緩衝頭沒有辦法清除掉IIS對靜態檔案的緩衝。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.