如何在IIS7中使gzip压缩正常工作?


69

我已经为IIS7安装了静态和动态压缩,并web.config在应用程序Virtual Folder级别设置了两个值。据我了解,我不再需要在服务器或站点级别启用压缩,并且可以使用web.config文件在每个文件夹的基础上进行管理。

我的.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,因为我的页面大小是相同的。我还将YSlow用于FireFox,这也可以确认我的页面没有被压缩。

我在这里想念什么?在IIS6中,只需指定文件类型并将压缩级别设置在0-10之间即可。我看不到需要指定文件类型或压缩级别的文档,因为默认值似乎涵盖了文件类型,并且我在任何地方都看不到该级别。

Answers:


63

在iis 7 beta版中,forums.iis.net上有一个与此相关的主题。原来那个家伙没有安装模块,但是听起来您已经从开头句子中排除了这一点。

微软对他的主要建议是启用失败的请求跟踪以找出问题所在。这可能是IIS7最被人忽视的功能之一,但肯定是最强大的功能之一。

  • 打开IIS管理器。
  • 转到您的站点,然后在操作窗格(最右侧)上,单击“配置”部分下的“失败的请求跟踪...”。
  • 点击“启用”。
  • 然后,在功能视图中,单击“失败的请求跟踪规则”。单击添加,接下来,输入200作为状态代码,然后单击完成。

如果在操作窗格中没有看到“失败的请求跟踪”,则需要使用“添加角色服务”向导(运行状况和诊断\跟踪)或通过Web平台安装程序将功能添加到服务器。 (产品\服务器\ IIS:跟踪),然后关闭并重新打开IIS管理器。

接下来,重新运行测试。这将生成一些日志信息供我们检查。

在c:\ inetpub \ logs \ FailedReqLogFiles \ w3svcx中查找。您将看到一堆名为fr000xx.xml的文件。在浏览器中打开其中任何一个。(顺便说一句,如果您将这些文件复制到任何地方,请确保freb.xsl在那里。此外,请勿删除freb.xsl-如果这样做,则只需删除整个目录或从另一个位置复制它,因为IIS仅会创建该目录每个文件夹一次)。

点击“请求详细信息”标签,然后选择“完成请求跟踪”。在页面上搜索“压缩”-您应该在几个区域中找到它;一次用于静态内容,一次用于动态内容。

如果找不到它们,则说明IIS配置不正确。如果找到它们,则应该看到它们,然后是compression_success和compression_do。成功是不言而喻的;“ do”表示所做的事情-在我的情况下,它显示为“ OriginalSize 1462784 CompressedSize 179482”

由于您的计算机无法正常工作,因此希望您会看到一些不同的东西可以帮助您解决问题。

完成后,请通过在网站的操作窗格中禁用失败的请求跟踪来确保关闭此功能。


14
这有帮助!原来,我们的罪魁祸首是dynamicCompressionDisableCpuUsage -默认情况下,如果你打90%的动态压缩被禁止,直到CPU返回到dynamicCompressionEnableCpuUsage默认为50%(!!)将不会重新启用
杰夫·阿特伍德

4
请注意,您需要确保已安装跟踪:iis.net/ConfigReference/system.webServer/tracing/…–
mhenry1384

@JohnW在一定程度上有所帮助。通过直接更改applicationHost.config中的“忽略命中频率”,我能够将STATIC_COMPRESSION_NOT_SUCCESS转换为STATIC_COMPRESSION_SUCCESS,但它仍然无法将压缩数据返回浏览器。我在这里有一个单独的线程: stackoverflow.com/q/38250376/392591
Jacques

28

我们有一个类似的问题,事实证明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的CPU使用率达到90%,它将禁用所有动态压缩内容,直到CPU使用率降至50%以下!

另外,此处还提供了一些有关GZIP实际CPU成本的重要建议和基准。

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

长话短说,除非您经常有超过200kb的动态页面,否则这不是问题。


21

遵循JohnW的出色建议,我也启用了日志记录来查找罪魁祸首,尽管事实证明失败的原因有所不同:

STATIC_COMPRESSION_NOT_SUCCESS 
Reason 14 
Reason NOT_FREQUENTLY_HIT

简而言之,似乎如果您没有足够频繁地访问该页面,则IIS7不会认为它值得进行压缩,这对我来说似乎有点奇怪。尽管如此,在这种情况下还是有道理的,因为我只是尝试在本地计算机上对其进行测试。

根据此页面,默认显示为页面必须在10秒内被命中两次才能成为“频繁命中”。如果确实需要,您可以覆盖applicationHost.config中的默认设置(%systemroot%\ Windows \ System32 \ inetsrv \ config)。至少对我来说,这是一个锁定的属性,因此您将无法在自己的web.config中覆盖它。

<serverRuntime frequentHitThreshold="1" />

另外,我现在注意到SO在这里已经有了这个答案:在IIS7中,gzip压缩文件不会保持这种状态


5

我通过在“添加/删除”程序中安装动态压缩解决了我的问题。


5

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

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

IIS7中的压缩方案默认情况下处于启用状态,但是它仅映射要压缩的单个javascript mime类型application / x-javascript。在上面添加的行告诉IIS提供所有您的mime类型的.js文件,从而使压缩工作。


我发现它是围绕着相反的方向-服务器将派遣JS作为application/x-javascript,但被压缩application/javascript
Zhaph -本杜吉德

3

打开静态压缩。动态压缩适用于动态页面,例如asp,php,aspx等。

这是用于压缩IIS配置参考的链接:


我看不到在IIS7上需要这样做的地方。我在IIS6中看到了,但没有看到7。–
Russ

1
您可以在IIS部分的IIS管理器(inetmgr)中找到它。打开“压缩”项,然后选中“启用静态内容压缩”复选框。
达伦·科普

添加了到IIS配置参考的链接。
达伦·科普

我看到了静态压缩设置,但我并不在乎。我想要对aspx页面进行动态压缩,并且在文档中找不到可以指定文件类型的位置。
罗斯,

一定是读错了您的问题,对不起。我虽然你说CSS没有被压缩。我不知道您是否可以在web.config中进行操作,但是我知道您可以在应用程序中进行操作。是否为IIS启用了动态压缩功能?
达伦·科普

0

对我来说,原来是环境

noCompressionForProxies

当我们在这里使用代理服务器时...请离开代理服务器,瞧,压缩。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.