# 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`,表示设置了压缩**