充分利用 IIS 压缩 - 第二部分:配置 IIS 6 压缩






4.69/5 (7投票s)
这个两部分的系列文章展示了如何充分利用 IIS 7 和 IIS 6 内置的压缩功能。本文第二部分专门介绍 IIS 6 压缩。
本系列文章的组成部分
- 充分利用 IIS 压缩 - 第一部分:配置 IIS 7 压缩
- 充分利用 IIS 压缩 - 第二部分:配置 IIS 6 压缩
引言
在本系列文章的第一部分中,我们看到了如何在 IIS 7 中使用压缩。
截至2011年8月,IIS 7 的前身 IIS 6 仍被 71.2% 使用 Microsoft-IIS 的网站所使用(来源)。此外,在 IIS 6 中使用压缩比在 IIS 7 中困难得多。因此,本文将介绍 IIS 6 压缩。
本文基于我的著作ASP.NET 网站性能秘诀中的第 10 章《压缩》。
如果您喜欢这篇文章,请 投票支持。
目录
入门
不幸的是,在 IIS 6 上配置压缩远非一帆风顺。它涉及四个步骤
- 在 IIS 管理器中开启压缩;
- 设置压缩静态文件缓存文件夹的权限;
- 更新元数据库;
- 重置 IIS 服务器。
让我们依次完成每个步骤。
在 IIS 管理器中开启压缩
这包括以下步骤
- 启动 IIS 管理器:点击开始 | 管理工具 | Internet 信息服务 (IIS) 管理器。
- 备份元数据库:右键点击您的服务器,然后点击所有任务 | 备份/恢复 配置。点击创建备份按钮,输入备份名称,例如今天的日期,然后点击确定。最后,点击关闭返回 IIS 管理器。
- 展开您的服务器。右键点击网站节点,然后点击属性 | 服务。
- 如果您的服务器有足够的空闲 CPU 容量,请选择压缩应用程序文件。由于动态文件的压缩内容没有缓存,这将导致 IIS 为每个请求即时压缩动态文件。因此,动态文件压缩比压缩静态文件消耗更多的 CPU。
- 选择压缩静态文件。
- 临时目录是压缩静态文件缓存的位置。保持临时目录的默认设置。或者输入不同的目录,例如,如果您的系统驱动器空间不足。确保它位于未压缩且未共享的本地 NTFS 卷上。
- 设置临时目录的最大大小。
- 点击确定。
设置压缩静态文件缓存文件夹的权限
要使静态压缩生效,IIS_WPG 组或应用程序池的标识必须对存储压缩文件的文件夹具有完全控制访问权限。
除非您在上一步中(在临时目录字段中)更改了文件夹,否则它将位于C:\WINDOWS\IIS Temporary Compressed Files。
- 右键点击文件夹,然后点击属性 | 安全。
- 点击添加按钮,添加IIS_WPG组,或应用程序池的标识。
- 允许您刚刚添加的标识具有完全控制权限,然后点击确定。
IIS_WPG 还是 IUSR_{计算机名}?
关于是否应该授予 IIS_WPG 组或 IUSR_{计算机名} 帐户对存储压缩文件的文件夹的访问权限,各种网站上都有相互矛盾的建议。然而,我对 Windows Server 2003 和 IIS 6 的全新安装的测试表明,只有当 IIS_WPG 组对该文件夹具有完全控制访问权限时,IIS 6 才会压缩静态文件,而与 IUSR_{计算机名} 的访问级别无关。
更新元数据库
接下来修改元数据库
- 让 IIS 允许您编辑元数据库。在 IIS 管理器中,右键点击左侧树顶部附近的 IIS 服务器。点击属性,勾选启用直接元数据库编辑,然后点击确定。
- 您通常会在目录C:\Windows\system32\inetsrv中找到元数据库文件
metabase.xml
。用文本编辑器打开该文件。 - 找到
IIsCompressionScheme
元素。应该有两个:一个用于 deflate 压缩算法,一个用于 gzip。 - 在这两个元素中,使用您的页面中使用的静态文件所需的文件扩展名(例如.css和.js)来扩展
HcFileExtensions
属性。您将得到如下所示的内容 - 此外,在这两个元素中,使用动态文件所需的文件扩展名(例如.aspx)来扩展
HcScriptFileExtensions
属性。您将得到如下所示的内容 - 动态文件的压缩级别由两个
IIsCompressionScheme
元素中的HcDynamicCompressionLevel
属性设置。默认情况下,这被设置为零,这太低了。您设置得越高,压缩效果越好,但 CPU 使用率也越高。您可能需要测试不同的压缩级别,以查看哪个在 CPU 使用率和文件大小之间提供了最佳权衡。从较低的压缩级别开始测试,然后逐渐提高,直到 CPU 使用率过高。压缩级别可以在 0 到 10 之间 - 静态文件的压缩级别由两个
IIsCompressionScheme
元素中的HcOnDemandCompLevel
属性设置。默认情况下,这被设置为 10,表示最大压缩。由于压缩的静态文件会被缓存(这样静态文件不会为每个请求都进行压缩),这会导致很少的 CPU 使用率。因此,您会希望保持默认设置。 - 保存文件。
- 禁止编辑元数据库。右键点击您的 IIS 服务器,点击属性,取消勾选启用直接元数据库编辑,然后点击确定。
HcFileExtensions="htm
html
css
js
xml
txt"
请记住,此处包含图像文件(如.gif、.jpg和.png)毫无意义。这些文件由于其原生格式已经过压缩。
HcScriptFileExtensions="asp
dll
exe
aspx
asmx
ashx"
HcDynamicCompressionLevel="1"
您可以在此处找到可用元数据库属性的完整列表。
除了直接编辑元数据库,您还可以从命令行运行adsutil.vbs实用程序来更改元数据库。这允许您编写脚本,以便快速更新多个服务器。例如,将HcDoStaticCompression
设置为true
将启用静态压缩。操作如下
- 打开命令提示符并将目录更改为C:\Inetpub\AdminScripts
- 运行以下命令
cscript adsutil.vbs set w3svc/filters/compression/parameters/HcDoStaticCompression true
有关adsutil.vbs的更多信息可在此处获取。
重置 IIS 服务器
最后,重置服务器,使其生效您的更改。右键点击您的 IIS 服务器,然后点击所有任务 | 重新启动 IIS。
或者,打开命令提示符并运行
iisreset
静态文件并非总是以压缩形式提供
如果请求静态文件,并且临时目录(压缩静态文件缓存的位置)中没有该文件的压缩版本,IIS 6 将发送该文件的未压缩版本。只有在发送完毕后,它才会压缩文件并将压缩版本存储在临时目录中,以备后续文件请求时使用。
总结
在本文中,我们看到了在 IIS 6 中启用压缩涉及四个步骤——开启压缩,设置权限以缓存压缩静态文件,更新元数据库,最后重置 IIS 6 服务器。
如果您喜欢本系列文章并想了解如何全面提高 ASP.NET 网站性能(从数据库服务器到 Web 服务器再到浏览器),请考虑我的书ASP.NET 网站性能秘诀。