通过在Apache中配置压缩来节省带宽

时间:2020-01-09 10:43:32  来源:igfitidea点击:

Apache优化

如何使用Apache的deflate_module压缩文件,然后再将其传输到支持gzip的浏览器。根据所提供内容的类型,我们最多可以节省80%。

deflate模块具有使其灵活的选项,允许我们在检测到浏览器不支持压缩或者实施不良时禁用压缩。

启用压缩模块

Apache使用deflate_module使用GZIP压缩传出文件。该模块在CentOS和Ubuntu安装中默认加载。若要进行验证,请按照以下说明进行操作。

CentOS

  • 在文本编辑器中打开Apache的配置文件。 nano / etc / httpd / conf / httpd.conf
  • 通过验证以下行是否存在并且没有使用井号"#"将其注释掉,确保模块正在加载。 LoadModule deflate_module modules / mod_deflate.so

Ubuntu

  • 使用a2enmod命令启用所需的模块。 sudo a2enmod放气

配置压缩

压缩是在Apache的服务器配置中或者在虚拟主机中配置的。要进行更精细的控制,可以将其放在Directory或者Location指令中。

  • 添加以下行以启用压缩。 SetOutputFilter DEFLATE
  • 要为不支持它或者实现得不好的浏览器禁用压缩,请匹配其用户代理字符串,然后关闭放气或者对已知有问题的特定内容类型禁用压缩。
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4         gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
BrowserMatch MSIE             !no-gzip !gzip-only-text/html
  • 我们已将服务器设置为压缩所有输出。但是,已经压缩过的文件不应该使用,因为这样做会浪费宝贵的系统资源,而没有任何好处。让我们为图像,档案和音频禁用压缩。
# Don't compress images
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary

# Don't compress file archives
SetEnvIfNoCase Request_URI .(?:zip|tar|cab|gz|)$ no-gzip dont-vary

# Don't compress audio
SetEnvIfNoCase Request_URI .(?:mp3|wav|wma|ogg)$ no-gzip dont-vary

微调压缩

我们可能会发现默认设置压缩程度不理想,或者压缩消耗了大量系统资源,需要回拨。放气模块可以进行一些微调,使我们可以更好地控制其执行方式。

压缩等级

通过使用和设置DeflateCompressionLevel指令,降低或者增加对输出使用的压缩级别。该值最大介于1(最小压缩量)和9(最大压缩量)之间。

DeflateCompressionLevel 7

内存使用情况

默认设置使用压缩所需的最大内存量。但是,如果内存受阻,则可能需要减少压缩期间使用的内存量,以免其他进程饿死。使用DeflateMemLevel指令,其值介于1(最少的内存)和9(最多的内存)之间。

降低内存使用量将增加压缩文件所需的时间。如果我们选择将请求时间从默认值9降低,请密切注意请求时间。

DeflateMemLevel 6

记录压缩率

启用日志记录压缩统计信息以验证放气是否正常,并查看达到的比率。

对数比

要启用带有Web浏览器信息的请求文件的比率日志记录,请将以下内容添加到网站日志记录配置中。

DeflateFilterNote ratio

LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate
CustomLog logs/deflate_log deflate

记录文件大小和传输大小

我们希望从压缩中获得更多信息。我们可以启用deflate来记录文件的原始大小以及压缩后的大小。

DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio

LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
CustomLog logs/deflate_log deflate

日志文件输出示例

以下是在deflate日志的输出中可以找到的示例。请求网址后的第一个值是压缩文件的大小,第二个是原始文件的大小。最后是压缩文件相对于原始文件的大小百分比。

"GET /2014/09/my-article HTTP/1.1" 5392/18573 (29%)
"GET /css/base.css HTTP/1.1" 2987/14186 (21%)
"GET /imgs/logo.png HTTP/1.1" -/- (-%)
"GET /js/jquery-2.0.3.min.js HTTP/1.1" 29323/83616 (35%)
"GET /imgs/2014/09/my-article/figure01.png HTTP/1.1" -/- (-%)
"GET /imgs/2014/09/my-article/figure02.png HTTP/1.1" -/- (-%)

我们可以看到日志中的某些文件未指定值,而是在末尾显示-/(-%)。这意味着它们没有被压缩,因为它表明我们的PNG图像没有被压缩。