[英]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.