# 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`,表示設置了壓縮**