# mod_deflate 模块介绍 [TOC] ## 模块安装 ### 检查是否安装 1. 编译安装`apache`情况指定了`--enable-deflate`参数的检查命令 `/usr/local/apache/bin/apachectl -l|grep mod_deflate` 2. 以dso动态编译安装,则查看命令如下 ~~~ # ls -l /usr/local/apache/modules/ |grep mod_deflate -rwxr-xr-x 1 root root 37446 12月 12 17:43 mod_deflate.so # /usr/local/apache/bin/apachectl -M|grep defalte deflate_module (dynamic) ~~~ >[danger] 以上两种情况不能同时存在,否则可能会有冲突。 ### `mod_deflate` 模块的常规安装方法 #### 编译apache时加入参数`--enable-deflate` 可以通过查看模块编译的帮助信息,如下: ~~~ [root@luo.centos6.5 /usr/local/src/httpd-2.2.31] # ./configure --help|grep deflate --enable-deflate Deflate transfer encoding support ~~~ > 提供内容的压缩传输编码支持,一般html,js,css等内容的站点,使用此参数功能可以大大提高传输速度,提升访问者访问体验。**在生产环境中,这是apache调优的一个重要选项之一。** #### `mod_deflate` DSO动态安装方法 DSO动态模块加载配置全部命令 ~~~ cd /usr/local/src/httpd-2.2.31/modules/filters/ # 切换到apache源码模块目录中 /usr/local/apache/bin/apxs -i -a -c mod_deflate.c # 以dso的方式编译入到apache中 ... ... chmod 755 /application/apache2.2.31/modules/mod_deflate.so [activating module `deflate' in /application/apache2.2.31/conf/httpd.conf] ls -lahi /usr/local/apache/modules/|grep mod_deflate.so # 检查mod_deflate 1538514 -rwxr-xr-x 1 root root 70K 12月 13 02:15 mod_deflate.so # 或者通过匹配apache主配置文件 grep mod_deflate /usr/local/apache/conf/httpd.conf LoadModule deflate_module modules/mod_deflate.so ~~~ > **apxs 参数说明** `-c` 此选项表示需要执行编译操作,它首先会编译c源程序(.c)files为对应的目标代码文件(.o),然后连接这些目标代码和files中其余的目标代码文件(.o和.a),以生成动态共享对象.dsofile,如果没有指定`-o`选项,则此输入文件名由files中的第一个文件名推测得到,也就是默认为 mod_name.so `-i` 此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的modules目录中。 `-a` 此选项自动增加一个LoadModule 行到apache的主配置文件中,用以激活此模块或者如果此行已经存在则启用之。 ## deflate模块的应用 ### deflate在主配置文件httpd.conf中的应用   把下列内容完整的复制到httpd.conf结尾并保存即可**(影响所有虚拟主机)** ~~~ <ifmodule mod_deflate.c> DeflateCompressionLevel 9 # 压缩级别 数值约大压缩效率越高 越消耗CPU资源 SetOutputFilter DEFLATE # 插入过滤器 AddOutputFilterByType DEFLATE text/html text/plain text/xml AddOutputFilterByType DEFLATE application/javscript AddOutputFilterByType DEFLATE text/css DeflateFilterNote ratio LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate CustomLog logs/deflate_log deflate </ifmodule> # 以下是纯净配置,直接追加到httpd.conf配置文件最后即可。 <ifmodule mod_deflate.c> DeflateCompressionLevel 9 SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/plain text/xml AddOutputFilterByType DEFLATE application/javscript AddOutputFilterByType DEFLATE text/css </ifmodule> >[danger] **注意:** 在windows下使用上述配置需要将 `.c` 去掉,也就是`<ifmodule mod_deflate> ... </ifmodule>` ~~~ **查看请求头发现多了`Vary: Accept-Encoding`,表示设置了压缩**