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

介绍

Mod_deflate是一个Apache模块,它允许在发送到客户端之前压缩Web服务器的输出。一旦您的网站内容的大小被压缩,其大小就会变小,客户端可以更快地下载它。这不仅对于带宽较低的客户有价值,而且在评估您的网站性能和网页排名时也会被搜索引擎考虑在内。

除压缩内容外,mod_deflate还可用于解压缩。如果您使用Apache作为反向代理并且希望进一步处理通过代理的内容,则此技术将适用。然而,该技术的使用非常有限。我们将继续关注使用mod_deflate进行压缩的文章。

准备

本指南已在Ubuntu 14.04上测试过。模块安装和配置不依赖于操作系统或操作系统版本,但配置文件的位置可能因操作系统及其版本而异。

它还假设您运行的是Apache 2.4.0或更高版本。要安装Apache,请按照此文章进行操作。

本教程中的所有命令都应以非root用户身份运行。如果命令需要root访问权限,则前面会有sudo。如果您还没有服务器,可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

安装

在Ubuntu 14.04上的默认Apache安装中包含并启用了Mod_deflate。确认这需求运行apachectl,请运行Apache服务器控制接口,并使用grep以下关键字过滤输出deflate

apachectl -t -D DUMP_MODULES |grep deflate

注意:如果apachectl不在您的路径中,您可能必须使用命令的完整路径:/usr/sbin/apachectl

您应该看看deflate_module (shared)是否已安装并启用了mod_deflate。如果您没有看到这个,请按照以下问题排查步骤操作:

  1. 确保已安装模块文件。此文件是核心软件包apache2的一部分,根据前面提到的准备条件,您应该已经安装了该文件。默认情况下,它位于/usr/lib/apache2/modules/mod_deflate.so。此外,Web服务器应该能够打开此文件。为此,mod_deflate.so应具有世界可读的权限,例如644。
  2. 检查模块是否已加载。打开模块配置文件/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,即:

<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.js等将通过mod_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 CVM上没有它,那么您可以使用该sudo apt-get install wget命令安装它。

对于测试,您将需要一个至少几百KB的文本文件,压缩后该文件应该变小。如果您手头没有这样的文件,可以下载JQuery,它是一个流行的JavaScript库并将其上传到您的站点。如果您不确定将文件放在何处,只需将其上传到Ubuntu 14.04中的Apache默认文档根目录/var/www/html/即可。因此,该文件将在默认站点的根目录中可用。

注意:为了使mod_deflate压缩输出,客户端(通常是浏览器)必须支持压缩。如果客户端不支持压缩,则文件将按原样发送。

将示例测试文件上传到您的站点后,使用wget将其下载。您可以从本地计算机或CVM执行此测试。像这样:

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)小三倍多。

您可以通过使用Linuxls命令检查下载文件的大小来确认上述计算,以列出目录内容,如下所示:

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后的下一个步骤。

想要了解更多关于Linux的开源信息教程,请前往腾讯云+社区学习更多知识。

参考文献:《How To Install And Configure mod_deflate On Ubuntu 14.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏邹立巍的专栏

Linux 的进程间通信:管道

管道,英文为 pipe 。这是一个我们在学习 Linux 命令行的时候就会引入的一个很重要的概念。管道是UNIX 环境中历史最悠久的进程间通信方式。本文主要说明...

1.1K20
来自专栏LeoXu的博客

Eclipse中做Android开发LogCat的使用

LogCat是Eclipse里面做Android开发的工具包ADT中的一个工具,用来查看和过滤Android日志系统的输出。

12010
来自专栏谦谦君子修罗刀

程序员面试闪充--版本管理之SVN

在软件开发过程中,通常一个软件项目要靠多人合作完成的。而在此过程中的修修改改一定会存在一些不可避免的问题。可能一不小心就闹出个大乱子呢。 一、源代码管理的问题 ...

28960
来自专栏芋道源码1024

Java 工程师居家必备的 Intellij IDEA Top10 插件

支持lombok的各种注解,从此不用写getter setter这些 可以把注解还原为原本的java代码 非常方便

62250
来自专栏PPV课数据科学社区

大数据系列(4)——Hadoop集群VSFTP和SecureCRT安装配置

前言 经过前三篇文章的介绍,已经通过VMware安装了Hadoop的集群环境,当然,我相信安装的过程肯定遇到或多或少的问题,这些都需要自己解决,解决的过程就是学...

34440
来自专栏IT大咖说

MongoDB技术分享:WiredTiger存储引擎

内容来源:2018 年 10 月 27 日,MongoDB中文社区联席主席郭远威在“2018年MongoDB中文社区 广州大会”进行《WiredTiger存储引...

23020
来自专栏JavaEdge

gitlab 账号注册及修改资料填写注册信息确认邮件

注册后邮箱会收到一封确认邮件,如果没有收到邮件,可能是被误判为垃圾邮件,请进入邮箱的垃圾箱进行查找。(目前无法收到邮件,请加群后,在群内@Tinker 进行激活...

34020
来自专栏刘明的小酒馆

事务与一致性:刚性or柔性?

在高并发场景下,分布式储存和处理已经是常用手段。但分布式的结构势必会带来“不一致”的麻烦问题,而事务正是解决这一问题而引入的一种概念和方案。我们常把它当做并发操...

962110
来自专栏Python自动化测试

Jmeter4.0接口测试之案例实战(七)

在前面的知识体系中介绍了Jmeter的基本应用,下来通过具体的案例来看Jmeter在接口测试中的具体案例实战部分。

45930
来自专栏木子昭的博客

美轮美奂的Arch, 详解Arch虚拟机安装

72450

扫码关注云+社区

领取腾讯云代金券