介绍
Mod_deflate 是一个 Apache 模块,允许从您的 Web 服务器的输出在发送到客户端之前被压缩. 一旦您的网站内容的大小被压缩,它的大小会更小,客户端可以更快地下载。
除了压缩内容外,mod_deflate 也可以用于不压缩目的,如果您使用 Apache 作为反向代理程序,并且您希望进一步处理通过代理程序传输的内容,则此技术将适用于非常有限的用途。
前提条件
此指南已在 Ubuntu 14.04 上测试,对于 CentOS 7 请查看 此指南. 模块的安装和配置不取决于 OS 或 OS 版本,但配置文件的位置可能因不同的 OS 及其版本而有所不同。
它还假定您正在运行 Apache 2.4.0 或更高版本。 要安装 Apache,请遵循 如何在 Ubuntu 14.04 上安装 Linux, Apache, MySQL, PHP (LAMP) 堆栈的第 1 步文章。
本教程中的所有命令都应该作为非 root 用户运行. 如果命令需要 root 访问,则将先由 sudo
。
安装
Mod_deflate 已包含并启用在 Ubuntu 14.04 上默认的 Apache 安装中。 为了确认这个运行 apachectl
, Apache 服务器控制接口,并用 grep
过滤输出对关键字 deflate
如下:
1apachectl -t -D DUMP_MODULES |grep deflate
<$>[注]
注: 如果「apachectl」不在你的路径中,你可能需要使用到命令的完整路径: /usr/sbin/apachectl
。
如果安装和启用mod_deflate,您应该看到deflate_module (共享)
。
- 确保模块文件已安装. 该文件是核心
apache2
包的一部分,您应该已经安装了上述前提条件。 默认情况下,它位于/usr/lib/apache2/modules/mod_deflate.so
中。 此外,网页服务器应该能够打开此文件。 为此,mod_deflate.so
应该具有世界可读的权限,如 644. - 检查模块是否已被加载。 打开模块配置文件
/etc/apache2/mods-enabled/deflate.
load,这是对 `et/capache2/mods-available/deflate.load 的一个符号链接,并确保此行存在并且没有评论:
1LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
<$>[注] 注: 如果您需要更改Apache配置,请不要忘记重新启动Apache。
配置
要开始使用mod_deflate,你必须指定应该压缩的文件类型。一方面,简单文本格式可以通过压缩大大减少大小,这就是为什么适用于HTML,CSS或JavaScript文件的意义。
作为一个开始,您可以使用文件中的默认配置 /etc/apache2/mods-enabled/deflate.conf
,一个对 /etc/apache2/mods-available/deflate.conf
的 symlink,这是:
1[label /etc/apache2/mods-enabled/deflate.conf]
2<IfModule mod_deflate.c>
3 <IfModule mod_filter.c>
4 # these are known to be safe with MSIE 6
5 AddOutputFilterByType DEFLATE text/html text/plain text/xml
6
7 # everything else may cause problems with MSIE 6
8 AddOutputFilterByType DEFLATE text/css
9 AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript
10 AddOutputFilterByType DEFLATE application/rss+xml
11 AddOutputFilterByType DEFLATE application/xml
12 </IfModule>
13</IfModule>
上面的代码意味着,当一个文件匹配的扩展,任何流行的文本文件扩展,如 .html
, .txt
, .xml
, .css
, .js
等,它将被压缩,通过 mod_deflate 的 deflating 行动。
<$>
注: 在Ubuntu中,Apache配置被直观地组织成多个文件,而且配置文件通常不被启用,例如,模块配置文件位于目录 /etc/apache2/mods-available/
,例如 /etc/apache2/mods-available/deflate.conf
. 只有在目录 /etc/apache2/s-enabled/
中创建一个模块配置文件时才被启用,例如 /etc/apache2/mods-enabled/
。
此外,mod_deflate 还有其自己的几个重要配置选项:
DeflateCompressionLevel
— 要应用的压缩级别. 默认情况下,这个级别是 9,是压缩的最高级别. 1是压缩的最低级别. 较高的压缩将以较高的服务器CPU使用的价格产生最小的输出。DeflateMemLevel
— 压缩库可以使用的存储量。 默认值是9,这也是最高值。 要准确计算允许的存储量,您应该将DeflateMemLevel
值乘以 16K。DeflateWindowSize
— 压缩窗口大小。 默认情况下,这是 15 的最高可能值。
在大多数情况下,您可以将上述值保留为默认值,但是,如果您怀疑您的服务器性能在使用mod_deflate后显著恶化,则可以在配置文件中设置较低的值 /etc/apache2/mods-enabled/deflate.conf
如下:
1DeflateCompressionLevel 1
以上将降低压缩级别,从而使文件变得更大.但是,mod_deflate 将以这种方式使用更少的 CPU. 如果您决定应用任何此类更改,请确保重新启动 Apache。
测试
有各种方法来测试mod_deflate,但最简单的方法是使用wget,非交互式网络下载程序. 如果你没有它已经在你的Ubuntu 14.04 Droplet,那么你可以用命令安装它 sudo apt-get install wget
。
对于测试,你需要至少几百KB的文本文件,这应该在压缩时变得更小. 如果你没有这样的文件在手中,你可以下载 JQuery这是一个流行的JavaScript库,并将其上传到你的网站. 如果你不确定在哪里把文件,你可以简单地上传到Apache的默认文档根,这是在Ubuntu 14.04中 /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 可以帮助您显著减少网站的带宽需求。