介绍
Mod_deflate 是一个 Apache 模块,允许从您的 Web 服务器的输出在发送到客户端之前被压缩. 一旦您的网站内容的大小被压缩,它的大小会更小,客户端可以更快地下载。
除了压缩内容外,mod_deflate 也可以用于不压缩目的,如果您使用 Apache 作为反向代理程序,并且您希望进一步处理通过代理程序传输的内容,则此技术将适用于非常有限的用途。
前提条件
本指南已在 CentOS 7 上测试,模块安装和配置不取决于操作系统或操作系统版本,但配置文件的位置可能因操作系统及其版本而异。
它还假定您正在运行 Apache 2.4.0 或更高版本。 要安装 Apache,请遵循 如何在 CentOS 上安装 Linux, Apache, MySQL, PHP (LAMP) 堆栈文章的第 1 步。
本教程中的所有命令都应该作为非 root 用户运行. 如果命令需要 root 访问,则将被sudo
提前。
安装
Mod_deflate 包含并启用在 CentOS 7 上默认的 Apache 安装中。 为了确认此运行 apachectl
, Apache Server 控制接口,并用 grep
过滤输出对关键字 deflate
如下:
1apachectl -t -D DUMP_MODULES |grep deflate
如果安装和启用mod_deflate,您应该看到deflate_module (共享)
。
- 确保模块文件已安装. 此文件是核心
httpd
包的一部分,您应该已经根据前面提到的前提安装了。 默认情况下,它位于/etc/httpd/modules/mod_deflate.so。 此外,网页服务器应该能够打开此文件。 为此,
mod_deflate.so` 应该具有世界可读的权限,如 755. - 检查模块是否已加载。 打开 Apache 基础模块配置文件
/etc/http/d/conf.modules.d/00-base.conf
并确保此行存在并未评论:
1LoadModule deflate_module modules/mod_deflate.so
<$>[注] 注: 如果您需要更改Apache配置,请不要忘记重新启动Apache。
配置
要开始使用mod_deflate,你必须指定应该压缩的文件类型。一方面,简单文本格式可以通过压缩大大减少大小,这就是为什么适用于HTML,CSS或JavaScript文件的意义。
要配置 mod_deflate,请使用样本代码创建一个新的配置文件 /etc/httpd/conf.d/mod_deflate.conf
:
1[label /etc/httpd/conf.d/mod_deflate.conf]
2<filesMatch "\.(js|html|css)$">
3 SetOutputFilter DEFLATE
4</filesMatch>
上面的代码意味着,当一个文件匹配扩展 .js
, .html
或 .css
时,它将通过标准的 Apache SetOutputFilter
指令被压缩(脱格)。
<$>[注]
注: 您可以将上述代码放入主配置文件 /etc/httpd/conf/httpd.conf
. 但是,最好将这些特定配置部分分开到不同的文件中。 为此,在 CentOS 7 中,任何在目录 /etc/httpd/conf.d/
中放置的扩展 .conf
的文件都会通过主要 Apache 配置文件末尾的指令 IncludeOptional conf.d/*.conf
自动加载。
此外,mod_deflate 还有其自己的几个重要配置选项:
DeflateCompressionLevel
- 要应用的压缩级别. 默认情况下,这个级别是9级,压缩的最高级别。 1是压缩的最低级别。 更高的压缩将以更高的服务器CPU使用的价格产生最小的输出。DeflateMemLevel
- 可以使用的压缩库的记忆 zlib的数量。 默认值是9个,这也是最高的值。 要准确计算允许的记忆值,您应该将DeflateMemLevel
值乘以16K。DeflateWindowSize
- 压缩窗口的大小。 默认情况下,它是15的最高可能值。 更高的数字意味着更高的压缩水平,
在大多数情况下,您可以将上述值保留为默认值,但是,如果您怀疑服务器性能在使用mod_deflate后显著恶化,则您可以在配置文件中设置较低的值 /etc/httpd/conf.d/mod_deflate.conf
如下:
1DeflateCompressionLevel 1
以上将降低压缩级别,从而使文件变得更大.但是,mod_deflate 将以这种方式使用更少的 CPU. 如果您决定应用任何此类更改,请确保重新启动 Apache。
测试
有各种方法来测试mod_deflate,但最简单的方法是使用wget,非交互式网络下载程序. 如果你还没有在你的CentOS 7Dropplet上,那么你可以用命令sudo yum install -y wget
安装它。
对于测试,你需要至少几百KB的文本文件,如果你没有这样的文件,你可以下载 JQuery,这是一个流行的JavaScript库,并将其上传到你的网站. 如果你不确定把文件放在哪里,你可以简单地将其上传到Apache默认文档根,即在CentOS 7中 /var/www/html/
。
<$>[注] 注: 为了让 mod_deflate 压缩输出,客户端(通常是浏览器)必须支持压缩。
一旦示例测试文件上传到您的网站下载它用wget
。你可以从本地机器或从Droplet执行这个测试。
1wget --header="Accept-Encoding: gzip" http://<your_server_ip>/jquery-1.11.3.js
在上面的示例中,您正在从您的Apache服务器下载jquery-1.11.3.js
文件. 为了使用压缩,我们通过额外的wget
标题参数Accept-Encoding: gzip
。
在上面的方式下载时,文件 jquery-1.11.3.js
应该是 83KB. 事实上,这不是完全相同的原始JavaScript文件,而且还应该由客户端提取,导致客户端的一些过剩。
您可以首先通过检查下载的文件的大小来确认上述计算,使用Linux命令列出目录内容ls
如下:
1ls -lah jquery-1.11.3.js
2-rw-r--r-- 1 user user 83K Apr 28 12:20 jquery-1.11.3.js
然后,您可以再次使用ls
命令将结果与网站上的原始文件进行比较:
1ls -lah /var/www/html/jquery-1.11.3.js
2-rw-r--r-- 1 apache apache 278K Apr 28 12:20 /var/www/html/jquery-1.11.3.js
结论
正如您从本文和使用 JQuery 库的真实生活示例中所看到的,Mod_deflate 可以帮助您显著减少网站的带宽需求。