网页开启Gzip

网页Gzip压缩是指在web server上将页面压缩后传输到客户端的浏览器,由浏览器解压缩(目前主流浏览器都支持),这样可以节约网页传输的时间和流量,但是会增加服务器的负载。使用的环境是CentOS+Apache+PHP。

一、使用php的内置函数ob_gzhandler()

二、直接在web server上开启(压缩php)
开启后就不用php内置函数来压缩了,php不允许gzip以后再次gzip。

1、php要支持zlib组件,需要在php.ini中设置

vim /etc/php.ini

找到:

zlib.output_compression = Off
;zlib.output_compression_level = -1

修改为:

zlib.output_compression = On
zlib.output_compression_level = 6

说明:
1)默认php是不开启zlib整站压缩输出的,而是通过对需要压缩输出的页面使用ob_gzhandler函数实现,两者只能二选一,否则会报错。
2)zlib.output_compression默认值为Off,将其设置为On,output buffer size(默认为4k)。
3)zlib.output_compression_level代表压缩比,默认推荐设置压缩比值为6,可选范围为1-9,-1代表关闭php zlib(gzip)压缩。

2、Apache配置mod_deflate模块
1)查看httpd.conf是否有:

LoadModule deflate_module modules/mod_deflate.so

没有的话需要自己编译这个模块。mod_deflate是Apache上用于网页压缩的过滤器。这两步的作用是开启php gzip压缩。

2)首先进入Apache源代码目录
比如源代码目录在:

cd /usr/local/src/httpd-2.2.21

找到模块所在的源文件目录:

cd /usr/local/src/httpd-2.2.21/modules/filters

3)使用apxs文件编译目标模块:

/usr/local/apache/bin/apxs -i -c -a mod_deflate.c

说明:
-i 安装
-c 编译指定模块
-a 激活模块(即向httpd.conf添加LoadModule指令)

编译成功后会生成:

/usr/local/apache/modules/mod_deflate.so

在/usr/local/apache/conf/httpd.conf里已经添加了:

LoadModule deflate_module modules/mod_deflate.so

4)如果编译时报错:Command failed with rc=65536 是有库没有安装

yum install libtool libtool-libs zlib zlib-devel

5)重启Apache:

/usr/local/apache/bin/apachectl restart

如果报错:

httpd: Syntax error on line 99 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/mod_deflate.so into server: /usr/local/apache/modules/mod_deflate.so: undefined symbol: inflateEnd

解决办法:
在LoadModule deflate_module modules/mod_deflate.so之前增加

LoadFile /usr/local/lib/libz.so



LoadFile /usr/lib/libz.so

三、apache gzip压缩html、css、javascript
在网站虚拟目录或根目录的配置中添加:

DeflateCompressionLevel 5
AddOutputFilterByType DEFLATE text/html text/css text/javascript application/x-javascript

参考资料:
http://www.cnblogs.com/AndyWithPassion/archive/2011/09/07/apache_gzip_config.html