如何在 Ubuntu 14.04 上安装和配置 mod_deflate

介绍

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 (共享)

  1. 确保模块文件已安装. 该文件是核心 apache2 包的一部分,您应该已经安装了上述前提条件。 默认情况下,它位于 /usr/lib/apache2/modules/mod_deflate.so 中。 此外,网页服务器应该能够打开此文件。 为此, mod_deflate.so 应该具有世界可读的权限,如 644.
  2. 检查模块是否已被加载。 打开模块配置文件 /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 可以帮助您显著减少网站的带宽需求。

Published At
Categories with 技术
Tagged with
comments powered by Disqus