mod_gzip:Apache的HTTP压缩优化

HTTP压缩对于纯文本内容可压缩至原大小的40%一下,从而提供60%以上的数据传输节约,虽然WEB服务器会因为压缩导致CPU占用的略微上升,但是 可以节约大量用于传输的网络IO。对于数据压缩带来的用户浏览速度提升(让页面符合8秒定律),这点总体负载5%-10%上升是非常值得的。毕竟通过数据 压缩会比通过不规范的HTML代码优化要方便得多。

mod_gzip的安装:

修改Makefile中的 apxs路径:然后make make install

配置:mod_gzip+mod_php
LoadModule gzip_module modules/mod_gzip.so


AddModule mod_gzip.c


<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_minimum_file_size 1000
mod_gzip_maximum_file_size 300000
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 mime text/.*
mod_gzip_item_include mime httpd/unix-directory
# mod_gzip的临时工作目录: mkdir /tmp/mod_gzip; chmod -R 777 mod_gzip
mod_gzip_temp_dir /tmp/mod_gzip
mod_gzip_dechunk Yes
mod_gzip_keep_workfiles No
</IfModule>

mod_gzip和mod_php的配合:不要让mod_gzip和mod_php使用同一个临时目录,php_session存放目录可以通过 php.ini设置到session.save_path = /tmp/php_sess

mod_gzip和Resin配合:
从resin的邮件列表上查到的:要让mod_gzip在mod_caucho后加载,否则mod_gzip不起作用
…othr modules
AddModule mod_so.c
AddModule mod_caucho.c
#notice: mod_gzip must load after mod_caucho
AddModule mod_gzip.c
AddModule mod_expires.c

配置:mod_gzip + resin
<IFModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk yes
mod_gzip_keep_workfiles No
mod_gzip_minimum_file_size 3000
mod_gzip_maximum_file_size 300000
mod_gzip_item_include file .html$
mod_gzip_item_include mime text/.*
mod_gzip_item_include mime httpd/unix-directory
mod_gzip_item_include handler caucho-request
</IFModule>

配置:mod_gzip + mod_proxy 反相代理加速并压缩 IIS
注意要增加缺省的文件编码属性映射。
AddType text/html .asp
AddType text/html .aspx

<IFModule mod_gzip.c>

AddType text/html .asp
AddType text/html .aspx
mod_gzip_on Yes
mod_gzip_dechunk yes
mod_gzip_keep_workfiles No
mod_gzip_minimum_file_size 3000
mod_gzip_maximum_file_size 300000
mod_gzip_item_include file .html$
mod_gzip_item_include file .asp$
mod_gzip_item_include file .aspx$
mod_gzip_item_include mime text/.*
mod_gzip_item_include mime httpd/unix-directory
mod_gzip_item_include handler proxy-server
</IFModule>

参考资料:

mod_gzip的下载
http://sourceforge.net/projects/mod-gzip/

mod_gzip项目首页
http://www.schroepl.net/projekte/mod_gzip/

Apache2 中的mod_deflate:压缩率比mod_gzip略低
http://httpd.apache.org/docs-2.0/mod/mod_deflate.html

模块化安装Apache
http://www.chedong.com/tech/apache_install.html

Apache mod_gzip 模块安装手记

说明
Apache 的 mod_gzip 号称互连网内容加速模块,可以将网络传输速度压缩到未压缩时的 1/4。

在mod_gzip出现之前,是怎麽状况?

我们知道,HTTP 1.1 已经支持 content encoding,就是可以将 html 的内容压缩传输。而在服务器端有两种方式对应,一种是pre-compressing,先压缩好,再提供传输,静态网页多的话可以这麽做,但是现在站点都 是动态内容,用户浏览器没有请求时,那个网页甚至是不存在的。

因此,当实时调用动态网页时,速度一般是很慢的。为了解决这个问题,一般采取 Cache,但是服务器端给的还是同样大小的文件,除非能够进行一种“实时”的压缩,把压缩过的动态内容传给用户。

可惜,不论是 Apache、Microsoft 的 IIS、IBM”s WebSphere Server 的缺省都不支持这种动态内容的实时压缩。流行的 SQUID Proxy-Caching Server 也没有压缩数据的能力。

mod_gzip 提供的正是这种能力,它可以把无论动态还是静态的内容,无论 HTML、XML,还是 SQL, Java, WML, VRML 等产生的内容在服务器端,进行实时压缩并传输,而不需要在客户端安装任何东西。

它是一个开放源代码的、标准的 Apache 模块,源代码程序只有 300K,安装非常容易,这意味著可以在 5 分钟内,使你的站点提速 75% !

安装

下载最新的mod_gzip

http://www.remotecommunications.com/apache/mod_gzip/

最新版本:
mod_gzip v 1.3.19.1a – 03/08/01

mod_gzip.c
URL: http://www.remotecommunications.com/apache/mod_gzip/src/1.3.19.1a/mod_gzip.c

添加 Apache 模块

apxs -i -a -c mod_gzip.c

(apxs 参考: http://httpd.apache.org/docs/programs/apxs.html ,一般在 apache-devel 包)

配置 httpd.conf (/etc/httpd/conf/httpd.conf)

# Dynamic Shared Object (DSO) Support
LoadModule gzip_module modules/mod_gzip.so
AddModule mod_gzip.c

添加到文件最後: (只是一个参考,你可以按照你的需要修改)

mod_gzip_on yes
mod_gzip_dechunk yes
mod_gzip_keep_workfiles No
mod_gzip_temp_dir /tmp
mod_gzip_minimum_file_size 1002
mod_gzip_maximum_file_size 0
mod_gzip_maximum_inmem_size 1000000

mod_gzip_item_include file .htm$
mod_gzip_item_include file .jpg$
mod_gzip_item_include file .gif$
mod_gzip_item_include file .html$
mod_gzip_item_include mime text/.*
mod_gzip_item_include file .php$
mod_gzip_item_include mime ""jserv-servlet""
mod_gzip_item_include handler ""jserv-servlet""
mod_gzip_item_include mime ""application/x-httpd-php.*""
mod_gzip_item_include mime httpd/unix-directory

mod_gzip_item_exclude file "".css$""
mod_gzip_item_exclude file "".js$""
mod_gzip_item_exclude file "".wml$""
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}npct."" common_with_mod_gzip_info2
CustomLog /var/log/httpd/mod_gzip common_with_mod_gzip_info2

加速显示结果分析
上面的 LogFormat、CustomLog将结果写在了log文件:


GET /ubb/Forum3/HTML/000007.html HTTP/1.1"" 200 4338 mod_gzip: OK In:18524 Out:4338:77pct.
GET /ubb/icons/icon7.gif HTTP/1.1"" 304 – mod_gzip: SEND_AS_IS:NO_200 In:0 Out:0:0pct.
GET /news/article.php?id=22 HTTP/1.1"" 200 6414 mod_gzip: DECHUNK:OK In:25372 Out:6414:75pct.

可以看出:

.htm In:18524 Out:4338:77pct.
.gif In:0 Out:0:0pct.
.php?id=XXX In:25372 Out:6414:75pct.

压缩後约为压缩前的 1/4, .gif 没有压缩。(因为它本身就是压缩格式)

意义
宽带、IDC、Cache 内容加速等等,都是基于一种“正”的思考,最终用户的最後一公里总是很难受;

然而带宽上传输的是什麽呢?是数据。

用最简单的方式把数据减到最少,这就是 mod_gzip。

Thanks: Snow Wolf

Ref:
HTTP Compression Speeds up the Web
URL: http://webreference.com/internet/software/servers/http/compression/

HyperSpace Co.
http://www.remotecommunications.com/