启用Apache压缩模块mod_deflate:
网站随着用户访问量的增加和内容量的增加,网站的带宽会不断的增加,随之就是网站成本的增加,并且当内容量增大的时候,客户端如果带宽小,就会影响用户的体验,因此从这两方面考虑,网站的某些内容必须经过压缩之后再传给用户,然后在用户客户端进行解压,来实现双方共赢的效果。
从服务器角度来说Web架构分为 LAMP和LNMP
从应用角度来说分为 CS模式和BS模式:
Client & Server——> 收银(超市、银行)
Browser & Server ——> 个人(浏览器) Browser发送请求——Server接受、处理、返回——Browser解析、展示。
目前一个网站上的资源非常多,图片、视频等等都是需要压缩之后才可以传给用户。Server来进行压缩,Browser来进行解压。
Apache的压缩要用到mod_deflate模块,该模块提供了DEFLATE传输过滤器,允许服务器在将输出内容发送到客户端以前进行压缩,以节约带宽,它的核心思量就是把文件现在服务器进行压缩,然后再进行传输,这样可以显著减少文件传输的大小,当传输完毕后,客户端浏览器会重新对压缩过的内容进行解压缩,如果没有特殊情况的话,所有的文本内容都应该能被gzip压缩,例如:html(php),js、css、xml、txt等。
安装mod_deflate模块两种方式:
1、编译的时候跟上--enable-deflate 即可实现安装
2、DSO方式安装。
扩展:DSO:Dynamic shared object动态共享对象,DSO模块可以在编译服务器之后编译,也可以用Apache扩展工具(apxs)编译并增加,使用DSO方式安装,/usr/local/apache/bin/apxs后跟的参数详解如下:
-c 此选项表明需要执行编译操作
-i 此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的modules目录。
-a 此选项自动增加一个loadModule行到httpd.conf文件中,以激活此模块,或者,如果此行已经存在,则启用之。
我个人的环境里面再安装之前的预编译的时候,就已经进行了安装,如果真的忘记在预编译的时候进行安装,也没关系,可以使用DSO的方式进行安装;
由于我已经安装了mod_deflate,所以找一个其他模块来演示;
/usr/local/apache/modules #该目录下是我们已经安装了的模块
/usr/local/src/httpd-2.4.16/modules/filters/ #该文件是http的源码安装包里面所有的模块内容
经过对比发现mod_data.c模块是没有的,所以使用DSO的方式进行安装:
安装的时候需要在/usr/local/src/httpd-2.4.16/modules/filters/ 路径下执行apxs,因为mod_data.c在filters文件下面:
[root@Lamp ~]# cd /usr/local/src/httpd-2.4.16/modules/filters/
[root@Lamp filters]# /usr/local/apache/bin/apxs -c -i -a mod_data.c
查看mod_data.so模块已经加载在了apache安装路径下的modules目录下:
查看Apache的配置文件就存在了mod_data.so: /etc/httpd/httpd.conf
检查mod_deflate是否安装:
配置压缩参数:
[root@Lamp ~]# vim /etc/httpd/httpd.conf #确认下面这一行是打开的,
此行解锁之后再进行下面的操作,不然下面的操作会报错:
在http的配置文件的末尾插入:
<ifmodule mod_deflate.c>
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
</ifmodule>
注释:
<ifmodule mod_deflate.c>
DeflateCompressionLevel 9 #压缩等级,越大效率越高,消耗CPU也越高 - 压缩为什么消耗CPU - 压缩 - 算法。
DeflateCompressionLevel 9是指压缩程度的等级,从1到9,9是最高等级。据了解,这样做最高可以减少8成大小的传输量(看档案内容而定),最少也能够节省一半。
DeflateCompressionLevel 预设可以采用 6 这个数值,以维持耗用处理器效能与网页压缩质量的平衡。
注:一般压缩等级使用6或8
SetOutputFilter DEFLATE #启用压缩
DeflateFilterNote Input instream #声明输入流的byte数量
DeflateFilterNote Output outstream #声明输出流的byte数量
DeflateFilterNote Ratio ratio #声明压缩的百分比
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript #仅压缩,限制特定的MIME类型文件
</ifmodule>
注:
1、如果是虚拟主机,需要在<VirtualHost*:80></VirtualHost>中添加配置即可实现压缩
2、图片和视频本身就是压缩格式,一般不需要压缩的。有些小图片和视频压缩后还会变大。
总结:我们在企业生产环境中时,在启用mod_deflate时,一定要注意,对于太小的文件和某些格式的图片不要对它们进行压缩,有可能越压越大。
扩展:AddOutputFilterByTypeDEFLATE后跟的所有的压缩文件类型,后期可以参照选择。
text/plain text/html text/php text/xml text/css text/javascript
application/xhtml+xml application/xml application/rss+xml application/atom_xml application/x-javascript application/x-httpd-php image/svg+xml image/gif image/png image/jpe image/swf image/jpeg image/bmp
修改完apache的配置文件之后,Apache重启之后,压缩功能也就开启了;