by:vitter@safechina.net blog:blog.securitycn.net
一、安装
1.下载源程序
可以从http://sourceforge.net/下载mod_gzip(这个模块已经很久没有维护了,apache 2.x已经内置有mod_deflate压缩模块)的源程序,使用源
程序编译生成Apache的模块(Module)。
2.解压源程序
tar -zxvf mod_gzip-1.3.26.1a.tgz
3.编译
进入源程序所在的目录进行编译,生成相应的动态链接库。编译需要指定参数APXS的相应位置:
make APXS=/usr/local/apache/bin/apxs
但是有报错,以下是编译mod_gzip报的错: make APXS=/usr/local/apache/bin/apxs
/usr/local/apache/bin/apxs -Wc,-Wall,-O3,-fomit-frame-pointer,-pipe -c mod_gzip.c mod_gzip_debug.c mod_gzip_compress.c -o
mod_gzip.so gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -I/usr/include/gdbm -DUSE_HSREGEX -fpic -DSHARED_MODULE -I/usr/local/apache/include -Wall,-
O3,-fomit-frame-pointer,-pipe -c mod_gzip.c cc1: error: unrecognized command line option "-Wall,-O3,-fomit-frame-pointer,-pipe" apxs:Break: Command failed with rc=1 make: *** [build] Error 1
只好把Makefile中的:-Wall,-O3,-fomit-frame-pointer,这几个选项去掉,然后编译就通过了。 我的gcc版本: Using built-in specs. Target: i386-redhat-linux Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-
threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-
libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin -
-with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux Thread model: posix gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)
(去了那几个选项也没什么影响,配置后重启已经gzip压缩了)
将mod_zip安装到Apache服务器中,其中也要指定APXS的具体位置:
make install APXS=/usr/local/apache/bin/apxs
4.调用mod_gzip模块
在Apache的配置文件httpd.conf中增加LoadModule参数,调用mod_gzip模块。
LoadModule gzip_module modules/mod_gzip.so
5.测试
运行以下命令测试安装是否成功:
/apache/bin/apachectl configtest
如果出现“Syntax OK”,则说明Apache中已经成功安装上mod_gzip的压缩模块了。
二、Apache中关于mod_gzip的配置
修改Apache的配置文件httpd.conf:
1.增加mod_gzip模块的调用
LoadModule gzip_module modules/mod_gzip.so
2.开启压缩功能
mod_gzip_on Yes
3.设置压缩文件的最小值(bytes)
mod_gzip_minimum_file_size 1000
4.设定压缩文件的最大值(bytes)
mod_gzip_maximum_file_size 1500000
5.最大占用内存(bytes)
mod_gzip_maximum_inmem_size 60000
如果您是安裝 mod_gzip 1.3.19.x 的版本,该设定值会被自动限定 60000 的大小。
6.设定压缩文件的临时目录
mod_gzip_temp_dir /tmp/mod_gzip
7.设定是否保持压缩的工作临时文件
mod_gzip_keep_workfiles No
8.设定各种需要压缩的文件及扩展名
mod_gzip_item_include file \.htm$ mod_gzip_item_include file \.html$ mod_gzip_item_include file \.php$ mod_gzip_item_include file \.php3$ mod_gzip_item_include file \.cgi$ mod_gzip_item_include mime ^text/html$ mod_gzip_item_include mime ^httpd/unix-directory$ mod_gzip_item_include handler proxy-server
mod_gzip_item_exclude mime ^image/ mod_gzip_item_exclude file \.js$ mod_gzip_item_exclude file \.css$ mod_gzip_item_exclude file \.zip$ mod_gzip_item_exclude file \.gz$ mod_gzip_item_exclude file \.exe$ mod_gzip_item_exclude file \.mp3$ mod_gzip_item_exclude file \.pdf$ mod_gzip_item_exclude file \.rar$
mod_gzip_item_include mime text/.* mod_gzip_item_include mime httpd/unix-directory
mod_gzip_item_exclude mod_gzip_item_include 指定 mod_gzip 过滤器。決定何种文件格式要進行压缩或不压缩。
mod_gzip_item_exclude -> 表示該文件格式不启用压缩功能。
mod_gzip_item_include -> 表示該文件格式要启用压缩功能。
9.指定针对 HTTP 的何种资料串模式进行压缩
mod_gzip_handle_methods GET
10. 指定浏览器使用的 HTTP 协议版本
mod_gzip_min_http 1000
当浏览器使用的 HTTP 协议版本大于等于此设定值是,才才会进行压缩动作。
1000 = HTTP/1.0, 1001 = HTTP/1.1, ... 依此类推。
11.log记录
LogFormat "%h %l %u %t /"%V %r/" %<s %b mod_gzip: %{mod_gzip_result}n In:%{mod_gzip_input_size}n -< Out:%
{mod_gzip_output_size}n = %{mod_gzip_compression_ratio}n pct." common_with_mod_gzip_info2 自定 Log-file 的格式和名称。
CustomLog logs/mod_gzip.log common_with_mod_gzip_info2 指定 Log-file 的存放位置以及要使用的格式名称。如果您有使用 VirtualHost 且在其中指定 CustomLog 的話,請将此行注释。因每个 Host
只能使用一个 CustomLog 設定項。
至于其他的设定格式,请自行参照 mod_gzip.conf 中的范例。
12.在crontab中加入清空临时文件的设置:
23 23 * * * (/usr/bin/find /tmp/mod_gzip_tmp -mtime +0 |/usr/bin/xargs rm -f)
三、常见问题及解决方法
1.解决调用标准zlib问题
如果在编译mod_gzip的时候没有指定zlib类库的具体位置,那么它默认路径就是/usr/local/lib,当你的zlib不在这个目录下面的时候,就会报
如下错误提示:
Cannot load /httpd/modules/mod_gzip.so into server/httpd/modules/mod_gzip.so: undefined symbol: top_module (或者是deflate)
解决方法就是,在编译mod_gzip的时候,编辑Makefile文件增加两个参数,分别指向zlib的存放目录:
INC=-I/usr/includeLIB=-lz -L/usr/lib
编辑ld.so.conf文件,在其中增加存放zlib标准类库的具体目录,然后运行ldconfig。
这样更改以后,Apache就不会上述出现问题了。
2.Apache中jk2模块有可能和mod_gzip冲突
这种现象会出现在Apache2、jk2及mod_gzip2.0.40配合的时候。最简单的解决办法是,改变应用环境的版本,使用Apache1.3、jk及mod_gzip1.3
配合就会避免产生这种冲突。
3.实现对servlet的压缩
我们在httpd.conf文件中增加相应的压缩配置文件,就可以实现对servlet进行压缩了。
mod_gzip_item_include handler jakarta-servlet mod_gzip_item_include handler jakarta-servlet$ mod_gzip_item_include handler ^jakarta-servlet mod_gzip_item_include handler ^jakarta-servlet$ mod_gzip_item_include handler ^^jakarta-servlet$
|