2009-04-24 49 views
68

我已經安裝了IIS7的靜態和動態壓縮,以及在我的應用程序Virtual Folder級別設置了兩個web.config值。據我瞭解,我不需要在服務器或站點級別啓用壓縮,並且可以使用我的web.config文件以每個文件夾爲基礎對其進行管理。如何在IIS7中獲得gzip壓縮的工作?

我在.config文件中的兩個設置,我已經設置爲自定義的gzip我的應用程序:

<httpCompression dynamicCompressionDisableCpuUsage="90" 
    dynamicCompressionEnableCpuUsage="0"> 
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" /> 
    <dynamicTypes> 
    <remove mimeType="*/*"/> 
    <add mimeType="*/*" enabled="true" /> 
    </dynamicTypes> 
</httpCompression> 
<urlCompression doDynamicCompression="true" 
    dynamicCompressionBeforeCache="true" /> 

然而,當我運行應用程序,我可以清楚地看到的是不使用gzip的,因爲我的頁面大小相同。我還爲FireFox使用了YSlow,這也證實我的頁面沒有被粘貼。

我在這裏錯過了什麼?在IIS6中,指定文件類型並在0-10之間設置壓縮級別非常簡單。我沒有看到需要說明的文件類型或壓縮級別,因爲默認值似乎覆蓋了文件類型,而且我沒有在任何地方看到該級別。

+0

0票下來 \t 請看看這篇文章:stackoverflow.com/a/7634875/1131855 我是不是能夠通過記事本編輯的applicationHost.config ++。這個鏈接提供了一個控制檯命令,對我有用 – 2014-11-18 17:00:56

回答

61

有在IIS 7測試版期間這個forums.iis.net一個線程。原來那個傢伙沒有安裝模塊,但這聽起來像是你從開始的句子中判斷出來的。

微軟對他的重要建議是使失敗的請求跟蹤能夠找出發生了什麼問題。這可能是IIS7中最受關注的功能之一,但它肯定是最強大的功能之一。

  • 打開IIS管理器。
  • 轉到您的網站,並在操作窗格(最右邊)上單擊「配置」部分下的「失敗的請求跟蹤...」。
  • 點擊'啓用'。
  • 然後,在功能視圖中,點擊'失敗的請求追蹤規則'。點擊添加,然後輸入200作爲狀態碼,然後點擊完成。

如果在操作窗格中沒有看到「失敗的請求追蹤」,則需要使用「添加角色服務」嚮導(運行狀況和診斷\追蹤)或通過Web平臺安裝程序(Products \ Server \ IIS:Tracing),然後關閉並重新打開IIS管理器。

接下來,重新運行您的測試。這會生成一些日誌信息供我們檢查。

查看c:\ inetpub \ logs \ FailedReqLogFiles \ w3svcx。您將看到一堆名爲fr000xx.xml的文件。在你的瀏覽器中打開它們中的任何一個。 (順便說一句,如果你在任何地方複製這些文件,請確保freb.xsl在那裏。另外,不要刪除freb.xsl - 如果你這樣做,只需刪除整個目錄或從另一個位置複製它,因爲IIS只創建它每個文件夾一次。)

單擊'請求詳細信息'選項卡並選擇'完成請求跟蹤'。在頁面上搜索「壓縮」 - 你應該在幾個地方找到它;一次用於靜態內容,一次用於動態內容。

如果您沒有找到它們中的任何一個,IIS配置不正確。如果你確實找到了它們,你應該看到它們後面跟着一個compression_success和一個compression_do。成功是自我解釋的; 'do'表明它做了什麼 - 在我的情況下,它顯示「OriginalSize 1462784 CompressedSize 179482」

由於您的工作不正常,希望您會看到不同的東西來幫助您解決問題。

確保在關閉網站操作窗格中失敗的請求跟蹤後關閉此功能。

+13

這有幫助!原來我們的罪魁禍首是dynamicCompressionDisableCpuUsage - 默認情況下,如果你點擊90%動態壓縮被禁用,並且不會重新啓用,直到CPU回落到dynamicCompressionEnableCpuUsage,默認爲50%(!!) – 2009-07-07 17:19:17

+4

請注意,您需要確保安裝了跟蹤:http://www.iis.net/ConfigReference/system.webServer/tracing/traceFailedRequests – mhenry1384 2011-01-25 19:23:55

+0

@JohnW這在一定程度上有所幫助。通過直接更改applicationHost.config中的忽略命中頻率,我能夠將STATIC_COMPRESSION_NOT_SUCCESS設置爲STATIC_COMPRESSION_SUCCESS,但它仍然不會將壓縮數據返回給瀏覽器。我有一個單獨的線程在這裏:http:// stackoverflow。com/q/38250376/392591 – Jacques 2016-07-21 08:42:10

3

打開靜態壓縮。動態壓縮是動態網頁如ASP,PHP,ASPX等

這裏有一個鏈接到IIS config reference for compression

+0

我沒有看到我需要爲IIS7做什麼。我在IIS6中看到它,但不是7. – Russ 2009-04-24 16:37:51

+1

可以在IIS部分下的IIS管理器(inetmgr)中找到它。打開「壓縮」項並選中「啓用靜態內容壓縮」複選框。 – 2009-04-24 16:47:20

+0

添加到IIS配置參考的鏈接。 – 2009-04-24 16:49:12

5

在Web.config文件的system.webServer部分,添加以下行:

<remove fileExtension=".js" /> 
<mimeMap fileExtension=".js" mimeType="application/x-javascript" /> 

在IIS7的壓縮方案是默認啓用的,但它僅映射一個JavaScript MIME類型是壓縮,應用程序/ x-javascript。添加上面的行告訴IIS給你所有的MIME類型的.js文件,這反過來使壓縮工作。

+0

我試過了,並沒有工作:( – vtortola 2012-12-07 11:27:27

+0

我發現它是相反的方式 - 服務器發送JS作爲'應用程序/ x-javascript',但壓縮'application/javascript' – 2012-12-10 22:38:35

26

我們有一個類似的問題,事實證明,IIS7做一些動態的基於CPU節流這裏..

http://www.iis.net/ConfigReference/system.webServer/httpCompression

dynamicCompressionDisableCpuUsage

可選UINT屬性。

指定禁用動態壓縮的CPU利用率的百分比。

注意:此屬性充當動態壓縮關閉時的CPU上限。 CPU利用率低於dynamicCompressionEnableCpuUsage屬性中指定的值時,將重新啓用動態壓縮。

的默認值是90。


dynamicCompressionEnableCpuUsage

可選UINT屬性。

指定CPU使用率的百分比,低於該百分比將啓用動態壓縮。該值必須介於0和100之間。平均CPU利用率每30秒計算一次。

注意:此屬性用作較低的CPU限制,低於該限制時將啓用動態壓縮。當CPU利用率超過dynamicCompressionDisableCpuUsage屬性中指定的值時,動態壓縮將被禁用。

的默認值是50。

注默認值 - 如果您的IIS7命中90%的CPU使用率,它會禁用所有動態gzip壓縮內容直到CPU使用率逢低跌破50%!

此外,還有一些關於GZIP的實際CPU成本的重要建議和基準。

http://weblogs.asp.net/owscott/archive/2009/02/22/iis-7-compression-good-bad-how-much.aspx

長話短說,除非你經常有動態網頁遠遠超過200KB的,它是一個非問題。

5

我通過在添加/刪除程序中安裝動態壓縮解決了我的問題。

20

繼JohnW的優秀建議,我也啓用了日誌記錄找到罪魁禍首,儘管失敗的原因竟然是不同的:

STATIC_COMPRESSION_NOT_SUCCESS 
Reason 14 
Reason NOT_FREQUENTLY_HIT 

總之,看來如果你不經常碰到頁面,IIS7不會認爲它值得壓縮,這對我來說似乎有點奇怪。儘管如此,在這種情況下是有道理的,因爲我只是試圖在本地機器上測試它。

根據this page,默認情況下,頁面必須在10秒內被點擊2次才能成爲「頻繁點擊」。如果你真的想,你可以覆蓋applicationHost.config(%systemroot%\ Windows \ System32 \ inetsrv \ config)中的默認值。至少對我來說這是一個鎖定的屬性,所以你不能在自己的web.config中覆蓋它。

<serverRuntime frequentHitThreshold="1" /> 

另外,我現在注意到,SO已經在這裏有這個答案:In IIS7, gzipped files do not stay that way

0

對於我來說竟然是設定

noCompressionForProxies 

,因爲我們是在一個代理這裏...把自己關代理,瞧,壓縮。