通过在Apache中配置压缩来节省带宽
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图像没有被压缩。