2013-10-25 71 views
1

我的IIS 7動態內容壓縮將不會像服務器日誌所驗證的那樣工作......發送/接收的字節與壓縮開啓和關閉相同。IIS 7動態內容壓縮不起作用

讓我經歷我到目前爲止做是爲了確保這樣做是對的事情:

1)安裝在網絡的動態壓縮模塊(杜)
2)開啓動態壓縮
3) .config在system.webserver/httpCompression下,我添加了DynamicCompressionDisableCpuUsage = 100和DynamicCompressionEnableCpuUsage = 99以確保儘可能頻繁地開啓壓縮。服務器的負載一般爲0%到2%的CPU,所以這應該不是問題。
4)我更改了system.webserver/httpCompression/scheme dynamicCompressionLevel從0到7,因爲默認值爲0
5)我已經添加了mime類型並在system.webserver/httpCompression/dynamicTypes下設置了enabled = true,並確保通過請求分析器,mimetype確實是正確的
6)之後,我甚至重新啓動網站/回收應用程序池。
7)我甚至添加了MIME類型來包含字符集,我讀過的地方有時會影響動態壓縮。

我還是沒有減少交通!是什麼賦予了!?我甚至將system.webserver/httpCompression/minFileSizeForComp設置爲1000B,即使這只是靜態壓縮思維,也許它可能會以某種方式繼續進行動態壓縮。日誌中發送的字節仍然與沒有壓縮時相同。

這裏是我的web.config部分,供參考:

<system.webServer> 
    <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" dynamicCompressionDisableCpuUsage="100" dynamicCompressionEnableCpuUsage="99" minFileSizeForComp="1000"> 
     <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" dynamicCompressionLevel="7" staticCompressionLevel="7"/> 
     <dynamicTypes> 
      <add mimeType="text/*" enabled="true"/> 
      <add mimeType="message/*" enabled="true"/> 
      <add mimeType="application/javascript" enabled="true"/> 
      <add mimeType="application/x-javascript" enabled="true"/> 
      <add mimeType="application/xml" enabled="true"/> 
      <add mimeType="application/json" enabled="true"/> 
      <add mimeType="application/json; charset=utf-8" enabled="true"/> 
      <add mimeType="application/json; charset=UTF-8" enabled="true"/> 
      <add mimeType="*/*" enabled="false"/> 
     </dynamicTypes> 
    </httpCompression> 
    <urlCompression doStaticCompression="true" doDynamicCompression="true"/> 
</system.webServer> 

下面是我引用拿出這些設置的一對夫婦的其他問題......好像我已經試過在書中每招。

How can I get gzip compression in IIS7 working?
https://serverfault.com/questions/200041/how-do-determine-the-dynamiccompressiondisablecpuusage-setting-on-iis7

回答

1

按照這個ServerFault答案:https://serverfault.com/a/125156/117212 - 你不能改變httpCompression在web.config中,它需要在applicationHost.config文件來完成。下面是我在Azure的Web角色使用修改applicationHost.config文件並添加MIME類型的壓縮代碼:

using (var serverManager = new ServerManager()) 
{ 
    var config = serverManager.GetApplicationHostConfiguration(); 
    var httpCompressionSection = config.GetSection("system.webServer/httpCompression"); 
    var dynamicTypesCollection = httpCompressionSection.GetCollection("dynamicTypes"); 

    Action<string> fnCheckAndAddIfMissing = mimeType => 
    { 
     if (dynamicTypesCollection.Any(x => 
     { 
      var v = x.GetAttributeValue("mimeType"); 
      if (v != null && v.ToString() == mimeType) 
      { 
       return true; 
      } 

      return false; 
     }) == false) 
     { 
      ConfigurationElement addElement = dynamicTypesCollection.CreateElement("add"); 
      addElement["mimeType"] = mimeType; 
      addElement["enabled"] = true; 
      dynamicTypesCollection.AddAt(0, addElement); 
     } 
    }; 

    fnCheckAndAddIfMissing("application/json"); 
    fnCheckAndAddIfMissing("application/json; charset=utf-8"); 

    serverManager.CommitChanges(); 
} 

ServerManager來自Microsoft.Web.Administration包的NuGet。

+0

我沒有使用這個,因爲我在你發佈之前很久就想出​​了答案,但你的回答是正確的。我只是在IIS管理器中編輯設置,而不是像編輯那樣編程,但我不明白爲什麼這樣做不起作用。乾杯! – Pugz