簡體   English   中英

IIS 7.5 上的 GZip 壓縮不起作用

[英]GZip Compression On IIS 7.5 is not working

我正在嘗試為 IIS 下的 static 文件支持 GZip 壓縮(默認情況下應該啟用但不啟用),但到目前為止還沒有工作。 這是 web 應用程序的 web.config 文件中<system.webServer>節點下的部分;

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
  <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" />
  <dynamicTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/x-javascript" enabled="true" />
    <add mimeType="application/json" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </dynamicTypes>
  <staticTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/x-javascript" enabled="true" />
    <add mimeType="application/atom+xml" enabled="true" />
    <add mimeType="application/xaml+xml" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </staticTypes>
</httpCompression>

<urlCompression doStaticCompression="true" />

我用谷歌瀏覽器試了一下。 這是請求標頭;

接受:text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8

接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3

接受編碼:gzip、deflate、sdch

接受語言:en-US,en;q=0.8

緩存控制:無緩存

連接:保持活動

主機:我的網站網址

雜注:無緩存

用戶代理:Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30

這些是響應標頭;

接受范圍:字節

內容長度:232651

內容類型:應用程序/x-javascript

日期:格林威治標准時間 2011 年 8 月 4 日星期四 08:58:19

ETag:“a69135734a50cc1:0”

最后修改時間:格林威治標准時間 2011 年 8 月 1 日星期一 12:56:37

服務器:Microsoft-IIS/7.5

X-Powered-By:ASP.NET

我檢查了 applicationHost.config 文件,發現了一些如下所示的節點;

----

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

----

<section name="urlCompression" overrideModeDefault="Allow" />

----

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/atom+xml" enabled="true" />
        <add mimeType="application/xaml+xml" enabled="true" />
        <add mimeType="*/*" enabled="false" />
    </staticTypes>
</httpCompression>

----

<urlCompression />

我在這里想念什么?

經過大量的搜索,我終於找到了什么壓縮工作在我的IIS 7.5上。 首先,IIS不會壓縮文件,除非它經常加載。 這提出了一個問題“IIS經常考慮什么?” 嗯,默認值是每10秒2次。 哎呀!

可以在web.config中更改此設置,但需要先在applicationHost.config中解鎖該部分。 以下是命令:

首先解鎖部分:

C:\\ Windows \\ System32 \\ inetsrv \\ appcmd.exe解鎖配置/section:system.webServer/serverRuntime

配置路徑“MACHINE / WEBROOT / APPHOST”中的未鎖定部分“system.webServer / serverRuntime”。

完成后,編輯web.config文件並添加serverRuntime元素:

<?xml version =“1.0”encoding =“UTF-8”?>
<結構>
<system.webServer>
<serverRuntime frequentHitThreshold =“1”frequentHitTimePeriod =“10:00:00”/>
...

在這種情況下,我將其設置為在10小時內點擊一次文件。 您可以根據需要調整值。 這是解釋serverRuntime元素的文檔:

http://www.iis.net/configreference/system.webserver/serverruntime

我希望這也有助於你的壓縮工作。

注意:您還可以在applicationHost.config文件中設置serverRuntime元素,但我選擇在web.config中更改它,因為我們有許多服務器和具有各種站點的服務器場,並且我更容易控制它從這個粒度級別。

要記住的一件事是,第一個命中通常會立即返回未壓縮,但會旋轉一個線程以在后台壓縮文件,以便為將來的請求提供壓縮服務。

此外,您是否嘗試過使用其他客戶端(例如IE)?

確保在服務器上安裝Dynamic Compression。 在IIS下添加/刪除功能。

我花了一些時間才弄明白這一點。 在applicationHost.config文件中的system.webServer / serverRuntime節點上將frequentHitThreshold屬性設置為1應該可以解決問題,如http://www.iis.net/ConfigReference/system.webServer/serverRuntime中所述

您可以通過以管理員身份執行以下命令來執行此操作:

%windir%\system32\inetsrv\appcmd set config /section:serverRuntime /frequentHitThreshold:1 /commit:apphost

一句警告 - “頻繁命中”概念似乎並不特定於壓縮。 我不知道設置這個是否會產生其他后果!

我們發現的一件事是我們的Azure網站由於運行了高資源WebJob而達到了最大的CPU使用率。 我們嘗試了上面的所有設置,沒有任何效果。 然后我們檢查了資源CPU的使用情況,發現它是80%+。 在80%的CPU負載下,gzip停止工作!

“system.webServer配置不允許在網站級別使用httpCompression” https://serverfault.com/questions/125139/iis7-dynamic-compression-not-success-reason-12

為什么使用配置文件? 只是嘗試使用一些超過2700字節的txt文件創建新的虛擬網站。 您也可以嘗試安裝動態壓縮模塊並為服務器ant打開此虛擬站點。

我相信將其添加為響應是值得的,因為它僅在評論中提及,但如果您想始終提供壓縮資源,這是真正的解決方案。 僅當您真的不關心有人下載大文件時,擺弄staticCompressionIgnoreHitFrequency才是可行的解決方案。

只要 CPU 利用率沒有觸發staticCompressionDisableCpuUsage ,上述設置將始終壓縮。

要 100% 確保資源被壓縮,您應該使用:

  staticCompressionIgnoreHitFrequency true 
  staticCompressionDisableCpuUsage 100
  staticCompressionEnableCpuUsage 100

這樣做即使是第一個請求也會被壓縮,即使 CPU 已達到 100% 的利用率。

請記住,IIS 會根據配置自動回收應用程序池,因此即使您設置了 10 小時但您的應用程序池每 1 小時重置一次,這也會導致重置后的第一次調用未被壓縮。

確保您知道自己在做什么,因為 GZip 仍然是一項昂貴的操作,並且根據您擁有的流量類型,您可能會在擺弄這些設置時導致性能問題。

更多信息: https://docs.microsoft.com/en-us/IIS/wmi-provider/httpcompressionsection-class?redirectedfrom=MSDN

此外,如果有興趣考慮使用 Brotli 而不是 Gzip,它可以提供更高級別的壓縮,同時對 CPU 性能的影響更小。 https://docs.microsoft.com/en-us/iis/extensions/iis-compression/iis-compression-overview

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM