如何在Ubuntu14.04上安装和配置mod deflate
介绍
Mod_deflate 是一个 Apache 模块,它允许您的 Web 服务器的输出在发送到客户端之前进行压缩。 一旦网站内容的大小被压缩,它的大小就会变小,客户可以更快地下载它。 这不仅对带宽较低的客户很有价值,而且在评估您的网站性能及其页面排名时,搜索引擎也会考虑到这一点。
除了压缩内容,mod_deflate 还可以用于解压缩目的。 如果您使用 Apache 作为反向代理并且您希望进一步处理通过代理的内容,则此技术将适用。 然而,这种技术的用途非常有限。 我们将把文章的重点放在使用 mod_deflate 进行压缩上。
先决条件
本指南已在 Ubuntu 14.04 上进行了测试。 对于 CentOS 7,请查看 本指南 。 模块安装和配置与操作系统或操作系统版本无关,但配置文件的位置可能因操作系统及其版本而异。
它还假设您正在运行 Apache 2.4.0 或更高版本。 要安装 Apache,请按照 如何在 Ubuntu 14.04 上安装 Linux、Apache、MySQL、PHP (LAMP) 堆栈的第 1 步操作。
本教程中的所有命令都应以非 root 用户身份运行。 如果该命令需要 root 访问权限,它将在前面加上 sudo
。 如果您还没有设置,请按照本教程进行操作:使用 Ubuntu 14.04 进行初始服务器设置。
安装
Mod_deflate 在 Ubuntu 14.04 上的默认 Apache 安装中包含并启用。 要确认这一点,请运行 apachectl
,Apache 服务器控制接口,并使用 grep
为关键字 deflate
过滤输出,如下所示:
apachectl -t -D DUMP_MODULES |grep deflate
- 注意:**如果
apachectl
不在您的路径中,您可能必须使用命令的完整路径:/usr/sbin/apachectl
。
- 注意:**如果
如果安装并启用了 mod_deflate,您应该会看到 deflate_module (shared)
。 如果您没有看到这一点,请按照以下故障排除步骤操作:
- 确保已安装模块文件。 该文件是核心
apache2
软件包的一部分,您应该已经按照前面提到的先决条件安装了该软件包。 默认情况下,它位于/usr/lib/apache2/modules/mod_deflate.so
中。 此外,Web 服务器应该能够打开此文件。 为此,mod_deflate.so
应该具有世界可读的权限,例如 644。 - 检查模块是否已加载。 打开模块配置文件
/etc/apache2/mods-enabled/deflate.load
,它是/etc/apache2/mods-available/deflate.load
的符号链接,并确保此行存在且未被注释掉:
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
注意: 如果您不得不更改 Apache 配置,请不要忘记重新启动 Apache。 重启指令为sudo apachectl restart
。
配置
要开始使用 mod_deflate,您必须指定应压缩的文件类型。 一方面,纯文本格式可以通过压缩大大减小大小,这就是为什么将其应用于 HTML、CSS 或 JavaScript 文件是有意义的。 另一方面,很多多媒体格式如Flash、图片等已经有压缩功能,再多压缩也无济于事。
首先,您可以使用文件 /etc/apache2/mods-enabled/deflate.conf
中的默认配置,它是 /etc/apache2/mods-available/deflate.conf
的符号链接,即:
/etc/apache2/mods-enabled/deflate.conf
<IfModule mod_deflate.c> <IfModule mod_filter.c> # these are known to be safe with MSIE 6 AddOutputFilterByType DEFLATE text/html text/plain text/xml # everything else may cause problems with MSIE 6 AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/xml </IfModule> </IfModule>
上面的代码意味着当一个文件与任何流行的文本文件扩展名匹配时,例如 .html
、.txt
、.xml
、.css
、[ X149X]等。 它将被 mod_deflate 的 deflate 动作压缩。 如果您不确定扩展名是如何按 mime 类型映射的,请检查文件 /etc/mime.types
。 您可能希望添加更多特定于您网站的扩展。
<$> 笔记: 在 Ubuntu 中,Apache 配置直观地组织在多个文件中。 此外,通常不启用配置文件。 例如,模块配置文件位于目录 /etc/apache2/mods-available/
中,例如 /etc/apache2/mods-available/deflate.conf
。 仅当在目录 /etc/apache2/mods-enabled/
例如 /etc/apache2/mods-enabled/deflate.conf
中创建指向模块配置文件的符号链接时,才会启用模块配置文件。 <$>
此外,mod_deflate 有一些自己的重要配置选项:
DeflateCompressionLevel
— 要应用的压缩级别。 默认情况下,此级别为 9,即最高压缩级别。 1 是最小的压缩级别。 更高的压缩率会以更高的服务器 CPU 使用率产生最小的输出。DeflateMemLevel
— 压缩库可以使用的内存量 zlib。 默认值为 9,这也是最高值。 要精确计算允许的内存,您应该将DeflateMemLevel
值乘以 16K。DeflateWindowSize
— 压缩窗口大小。 默认情况下,它是可能的最高值 15。 更高的数字意味着更高的压缩级别,同样以更多的服务器资源为代价。
在大多数情况下,您可以将上述值保留为默认值。 但是,如果您怀疑使用 mod_deflate 后服务器性能明显恶化,您可以在配置文件 /etc/apache2/mods-enabled/deflate.conf
中配置较低的值,如下所示:
DeflateCompressionLevel 1
以上将降低压缩级别,这将导致文件变大。 但是,mod_deflate 这样会使用更少的 CPU。 如果您决定应用任何此类更改,请确保重新启动 Apache。
测试
有多种测试 mod_deflate 的方法,但最简单的方法是使用非交互式网络下载器 wget。 如果您的 Ubuntu 14.04 Droplet 上还没有它,那么您可以使用命令 sudo apt-get install wget
安装它。
对于测试,您需要一个至少几百 KB 的文本文件,压缩后会变小。 如果您手头没有这样的文件,您可以下载流行的 JavaScript 库 JQuery 并将其上传到您的站点。 如果您不确定将文件放在哪里,您可以简单地将其上传到 Apache 默认文档根目录,即 Ubuntu 14.04 中的 /var/www/html/
。 因此,该文件将在您的默认站点的根目录中可用。
<$> 笔记: 为了使 mod_deflate 压缩输出,客户端(通常是浏览器)必须支持压缩。 如果客户端不支持压缩,则文件将按原样发送。 <$>
将示例测试文件上传到您的站点后,使用 wget
下载它。 您可以从本地计算机或 Droplet 执行此测试。 像这样:
wget --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 文件并不完全相同,它应该由客户端额外提取,这也造成了客户端的一些开销。 但是,通过网络传输的大小仅为 83KB,比原始文件 (278K) 小三倍多。
您可以首先通过检查下载文件的大小来确认上述计算,使用 Linux 命令列出目录内容 ls
,如下所示:
ls -lah jquery-1.11.3.js -rw-r--r-- 1 user user 83K Apr 28 12:20 jquery-1.11.3.js
然后您可以使用 ls
命令再次将结果与您网站上的原始文件进行比较:
ls -lah /var/www/html/jquery-1.11.3.js -rw-r--r-- 1 apache apache 278K Apr 28 12:20 /var/www/html/jquery-1.11.3.js
结论
正如您从本文和 JQuery 库的实际示例中看到的那样,Mod_deflate 可以帮助您显着降低站点的带宽需求。 要继续优化您的站点,请阅读 Apache 内容缓存 ,这是启用 mod_deflate 后的下一个合乎逻辑的步骤。