IIS 7动态内容压缩无法正常工作

时间:2013-10-25 07:49:28

标签: iis iis-7 web-config

我的IIS 7动态内容压缩无法通过服务器日志验证...发送/接收的字节与压缩打开和关闭相同。

让我介绍一下到目前为止我所做的事情,以确保做得好:

1)安装动态压缩模块(duh)
2)启用动态压缩
3)在system.webserver / httpCompression下的web.config中,我添加了DynamicCompressionDisableCpuUsage = 100和DynamicCompressionEnableCpuUsage = 99,以确保压缩尽可能频繁。服务器负载一般是0%到2%的CPU,所以这应该不是问题 4)我将system.webserver / httpCompression / scheme dynamicCompressionLevel从0更改为7,因为默认值为0
5)我已经在system.webserver / httpCompression / dynamicTypes下添加了mime类型并设置了enabled = true,并通过请求分析器确保mimetype确实是正确的 6)在此之后,我甚至重新启动了网站/回收应用程序池 7)我甚至添加了mime-types来包含charset,我读过的地方有时会影响动态压缩。

我仍然没有减少流量!是什么赋予了!?我甚至将system.webserver / httpCompression / minFileSizeForComp设置为1000B,即使这只是静态压缩,也许它可能以某种方式延续到动态压缩。日志中发送的字节仍然与未压缩的字节相同。

这是我的web.config部分FYI:

<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 个答案:

答案 0 :(得分:2)

根据此ServerFault答案:https://serverfault.com/a/125156/117212 - 您无法在web.config中更改httpCompression,它需要在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来自NuGet中的Microsoft.Web.Administration包。