Linux

Apacheにmod_gzipを組み込んでHP配信を高速化する

(2003/12/11 更新)

mod_gzipとは?

Apacheにmod_gzipというモジュールを組み込むと、htmlなどのファイルを
転送する時にサーバー側で圧縮してから送信し、ブラウザー側で解凍
して表示します。
(HTTP/1.1以降のIE5やNN6などが対応。当然、非対応の古い
ブラウザでも問題なく従来どおりのブラウジングができます)

回線が太くアクセス量の多いサーバーでmod_gzipを使うと圧縮によりCPU
負荷がかかり、かえって遅くなる可能性も考えられますが、このサイトのように
フレッツISDN・ADSL等で運営している場合や、アクセス量が多くてもCPUに
余力がある場合には高速化が期待できます。

(このサイトもApache + mod_gzipで稼動しています。)


mod_gzipの入手先

配布元 HSC's mod_gzip for the Apache Web Server  

(コンパイル済みのモジュールを組み込む場合)
mod_gzip 1.3.19.1a - Pre-compiled Linux mod_gzip.so module (85k)

(ソースファイルをapacheに組み込んでコンパイルする場合)
mod_gzip 1.3.19.1a - Complete source code as a 'C' code download. (300k)

尚、この記事を書いている時点での最新verは1.3.19.1aです。

2003/01/14 追記

公式サイトが http://sourceforge.net/projects/mod-gzip/ に移転し、
最新版(v1.3.26.1a)がリリースされています。(情報提供者 秋元様。Thanks! )
それに伴いインストール方法が変更されてる可能性がありますので、
あらかじめご了承お願いします。

また、Apache 2以降からmod_gzipの機能はmod_deflateという名前でソース
プログラムに標準で含まれるようになりました。そのインストールと設定の
方法についてはこちらのページで解説してますので参考に してください。


インストール

ここでは、ソースからビルドする方法について説明します。
Apacheのソースがあるディレクトリにmod_gzipのソースをコピーし、
configureのコマンドでモジュールの指定をします。

$./configure --prefix=/(apacheを置くpath)/apache \
             --add-module=mod_gzip.c 

--prefixオプションは、Apacheを標準のディレクトリにインストール
するであれば必要ありません。

そしてコンパイル、インストールします。

$ make
# make install
        

 

ちなみに、ソースからビルドせずにコンパイル済みのモジュールを組み込む
場合は、Apacheのlibexecディレクトリにmod_gzip.soをコピーし、httpd.confで

LoadModule gzip_module libexec/mod_gzip.so
AddModule mod_gzip.c

を記述すればいいらしいのですが、当方では検証していないので、どなたか
試してみてください(^^;


Apache設定ファイルの編集

http.confに次の行を追加します。各コマンドの意味は後で説明します。

AddModule mod_gzip.c
mod_gzip_on Yes
mod_gzip_keep_workfiles No
mod_gzip_minimum_file_size 1002
mod_gzip_maximum_file_size 0
mod_gzip_maximum_inmem_size 60000
mod_gzip_dechunk Yes mod_gzip_temp_dir "/tmp"(注1)
mod_gzip_item_include mime "application/x-httpd-cgi"
mod_gzip_item_include mime "application/x-httpd-php"
mod_gzip_item_include mime text/*
mod_gzip_item_include mime "httpd/unix-directory"
mod_gzip_item_include file "\.shtml$"
mod_gzip_item_include file "\.htm$"
mod_gzip_item_include file "\.html$"
mod_gzip_item_include file "\.php$"
mod_gzip_item_include file "\.pl$"
mod_gzip_item_include file "\.cgi$"
mod_gzip_item_exclude file "\.css$"
mod_gzip_item_exclude file "\.js$"
mod_gzip_item_exclude mime "image/.*" mod_gzip_min_http 1001

注1:

作業用ディレクトリを指定するのですが、このディレクトリの
パーミッションは、nobodyでも使用できるように設定して
おいてください。
また、OSがRAMDISKをサポートしているならば、高速化のため
そこに作成することをお勧めします。


ログファイル

ログファイルにgzipの圧縮状況も書き出すのであれば、httpd.conf中の
LogFormatの項目でcomonを次のように書き換えればいいのですが、

LogFormat "%h %l %u %t \"%r\" %>s %b mod_gzip:%{mod_gzip_result}n In:%{mod_gzip_input_size}n Out:%{mod_gzip_output_size}n: %{mod_gzip_compress ion_ratio}npct."  common

Analogなどのログ解析ツールを使っている場合、これではログが正常に
解析されないことがあるので、次のようにしてmod_gzip用のログファイルを
単独で出力する方が便利です。

LogFormat "%h %l %u %t \"%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."  gzip_info
CustomLog /var/log/httpd/gzip.log gzip_info


そしてApacheを再起動すれば、mod_gzipが動作するはずです。

アクセスログに次のように記録されれば圧縮成功です。

例)
 
 (〜中略〜) OK In:5664 Out:1916 67 pct.

右から順に ステータス、元サイズ、圧縮後サイズ、圧縮率です。

ステータスの意味についてですが、インターネット上で資料を探しても
見つからなかったので、下の表はWebmasterの推測で書いています。
もしかしたら間違っている箇所があるかもしれません。(^^;

OK 圧縮成功
DECHUNK:OK CGIなどの動的ページを圧縮した時
DECLINED:EXCLUDED 圧縮対象外ファイル
DECLINED:NO_ACCEPT_ENCODING ブラウザーがgzipに非対応
DECLINED:TOO_SMALL ファイルサイズが小さいために圧縮対象外
HTTP_LEVEL_TOO_LOW ブラウザーのHTTPバージョンがmod_gzip_min_http
(後述)で設定したレベルよりも低い
RECOVERY 作業用ファイルが作成できない。
SEND_AS_IS:NO_200 HTTP状態コードが200でないので圧縮していない。
(ブラヴザー内キャッシュに最終版がある等)


設定項目

httpd.conf内での主な設定項目です。

mod_gzip_on (Yes/No) mod_gzipを有効/無効にする
mod_gzip_keep_workfiles (Yes/No)
作業用フォルダに書き出したテンポラリファイルを
削除しない。通常はNo
mod_gzip_minimum_file_size

圧縮するファイルサイズの下限

mod_gzip_maximum_file_size        〃      の上限
mod_gzip_maximum_inmem_size オンメモリで圧縮するファイルサイズの上限
mod_gzip_temp_dir 作業用ディレクトリ
mod_gzip_min_http (1000/1001) HTTP(1.0/1.1)以降のブラウザに対応する
mod_gzip_item_include 圧縮対象ファイルのMIMEや拡張子の記述
mod_gzip_item_exclude

圧縮対象外ファイルの      〃

 



このサイトおよびこのサイトからリンクされているWEBページにあるソフトウェアあるいは情報が原因で生じたいかなる損害に対しても、このサイトの管理者、リンク先サイトの関係者は一切謝罪、補償をいたしません。
このサイトにある情報については、正しい情報であるよう努力していますが、そのことは正しさを保証するものではありません。
サイト内の情報は通告なく変更されます。インストール、改造、修正、その他、自己の行動は自責にてお願いいたします。