繁体   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