IIS 7.5上的GZip压缩不工作

gcmastyq  于 2022-11-12  发布在  其他
关注(0)|答案(7)|浏览(164)

我尝试在IIS下支持静态文件的GZip压缩(默认情况下应该是启用的,但是没有),但是到目前为止还没有工作。

<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" />

我用谷歌浏览器试过了。
接受:文本/html、应用/xhtml+xml、应用/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)苹果网络工具包/534.30(KHTML,类似于壁虎)Chrome/12.0.742.122 Safari/534.30
这些是响应头;
接受范围:字节
内容长度:232651
内容类型:应用程序/x-javascript
日期:格林尼治标准时间2011年8月4日星期四08:58:19
电子标签:“a69135734 a50 cc 1:0”
最后修改时间:2011年8月1日星期一12:56:37 GMT
服务器:微软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 />

我错过了什么?

iecba09b

iecba09b1#

After a lot of searching, I finally found what got compression working on my IIS 7.5. To start with, IIS will not compress a file unless it loaded often enough. That brings up the question "what does IIS consider often enough?" Well, the defaults are 2 times every 10 seconds. Yikes!
This setting can be changed in web.config, but the section needs to be unlocked first in applicationHost.config. Here are the commands:
First unlock the section:

C:\Windows\System32\inetsrv\appcmd.exe unlock config /section:system.webServer/serverRuntime

Unlocked section "system.webServer/serverRuntime" at configuration path "MACHINE/WEBROOT/APPHOST".
Now that is done, edit the web.config file and add the serverRuntime element:

  
    <system.webServer>
      
...
In this case, I set it to hit the file once in a 10 hour period. You can adjust the values as necessary. Here is the document that explains the serverRuntime element:
http://www.iis.net/configreference/system.webserver/serverruntime
I hope this helps get your compression working as well.

  • Note: you can also set the serverRuntime element up in the applicationHost.config file, but I chose to change it in the web.config because we have a number of servers and farms with various sites, and it is easier for me to control it from this level of granularity.*
bogh5gae

bogh5gae2#

需要记住的一点是,第一次命中通常会立即返回未压缩的文件,但会启动一个线程在后台压缩文件,以便为将来的请求提供压缩响应。
另外,您是否尝试过使用其他客户端(例如IE)?

kr98yfug

kr98yfug3#

请确保在服务器上安装了动态压缩。在IIS下添加/删除功能。

q0qdq0h2

q0qdq0h24#

在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

一句话的警告-“频繁命中”的概念似乎并不特定于压缩。我不知道是否有其他后果,作为设置这个的结果!

rmbxnbpk

rmbxnbpk5#

“system.webServer配置不允许在网站级别进行httpCompression”https://serverfault.com/questions/125139/iis7-dynamic-compression-not-success-reason-12
你为什么要使用配置文件呢?只要尝试用一些超过2700字节的txt文件创建一个新的虚拟网站。你也可以尝试安装动态压缩模块,并打开它为服务器和这个虚拟网站。

pbossiut

pbossiut6#

我们发现的一件事是,我们的Azure网站正在达到它的最大CPU使用率,由于有一个高资源的WebJob运行。我们已经尝试了上述所有设置,但没有任何工作。然后我们检查了资源CPU使用率,发现它是80%以上。在80%的CPU负载gzip停止工作!

af7jpaap

af7jpaap7#

我认为这是一个很好的回应,因为它只是在评论中提到,但这是真实的的解决方案,如果你想总是提供压缩资源。只有当你真的不在乎有人下载大文件时,摆弄 staticCompressionIgnoreHitFrequency 才是一个可行的解决方案。
只要CPU利用率没有触发 staticCompressionDisableCpuUsage,上述设置将始终进行压缩。
要100%确保资源已压缩,应用途:

staticCompressionIgnoreHitFrequency true 
  staticCompressionDisableCpuUsage 100
  staticCompressionEnableCpuUsage 100

例如,如果您希望使用web.config更改它,则可以用途:

<configuration>
  <system.webServer>
      <urlCompression doStaticCompression="true" doDynamicCompression="false" />
      <httpCompression staticCompressionIgnoreHitFrequency="true" staticCompressionDisableCpuUsage="100" staticCompressionEnableCpuUsage="100"/>
  </system.webServer>
</configuration>

这样做,即使是第一个请求也会被压缩,即使CPU的利用率达到100%。
请记住,IIS会根据配置自动回收应用程序池,因此,即使您设置了10小时,但应用程序池每1小时重置一次,这也会导致重置后的第一个调用未被压缩。
确保你知道你在做什么,因为GZip仍然是O昂贵的操作,并根据你的流量类型,你可能会导致性能问题摆弄这些设置。
如欲了解更多信息,请访问:https://learn.microsoft.com/en-us/IIS/wmi-provider/httpcompressionsection-class?redirectedfrom=MSDN
此外,如果考虑使用Brotli而不是Gzip,它可以提供更高级别的压缩,对CPU性能的影响更小。https://learn.microsoft.com/en-us/iis/extensions/iis-compression/iis-compression-overview

相关问题