技林TOP > 自宅サーバ構築メモ > mod_gzip


≫mod_gzipとは

WebサーバApacheのモジュールのひとつで、コンテンツを圧縮して転送することによりネットワークの帯域を節約することができます。
もともと圧縮されている動画や画像などのファイルは圧縮の効果が薄くなりますが、大量のテキストファイルを転送する場合には効果テキメンです。
CPUに余裕があって、転送量が一杯一杯という場合は是非導入を考えてみましょう。

*mod_gzip は Apache1系のモジュールです。Apache2系では、mod_deflateという同機能モジュールが標準であります。

≫mod_gzipの入手とインストール

mod_gzipは使われていない割に入ってたりたりしますが、一応インストールの方法から。

Vine LinuxならVinePlusにrpmが用意されてます。
# rpm -ivh mod_gzip-X.X.XX.i386.rpm


ソースからならSorceForge.netあたりからダウンロードしましょう。
# tar xvfz mod_gzip-X.X.X.XX.tgz
# cd mod_gzip-X.X.X.XX
# APXS=/usr/sbin/apxs make
# APXS=/usr/sbin/apxs make install
てな感じでインストール。

mod_gzip がインストールされると、Apacheの設定ファイル httpd.conf が httpd.conf.bak という名前に変更され、新しく httpd.conf が出来ます。

≫mod_gzipを有効にする

mod_gzip を有効にするには Apacheの設定ファイル httpd.conf 内に以下の様な記述を加えます。

LoadModule gzip_module modules/mod_gzip.so

AddModule mod_gzip.c

#----- mod_gzip
<IfModule mod_gzip.c>
# 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
# gzipのログの場所(httpdのログとは分けたほうが無難)
CustomLog /var/log/httpd/gzip_log gzip_info
# gzipを有効に
mod_gzip_on Yes
# ネゴシエートする
mod_gzip_can_negotiate Yes
# おまじない
mod_gzip_static_suffix .gz
AddEncoding gzip .gz
mod_gzip_update_static No
mod_gzip_dechunk yes
mod_gzip_keep_workfiles No
# 圧縮するファイルの最小サイズ。この値より小さいファイルは圧縮しない
mod_gzip_minimum_file_size 500
# 圧縮するファイルの最大サイズ。この値より大きいファイルは圧縮しない(0は無限)
mod_gzip_maximum_file_size 0
# 圧縮に使用するメモリサイズの上限
mod_gzip_maximum_inmem_size 52000
# 作業用ディレクトリ。Apacheのユーザー/グループ(nobody)が読み書き出来る必要があります。
mod_gzip_temp_dir /tmp
# GET と POST リクエストを圧縮対象にする
mod_gzip_handle_methods GET POST
# 圧縮するファイルの指定
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 handler ^perl-script$
mod_gzip_item_include handler ^server-status$
mod_gzip_item_include handler ^server-info$
mod_gzip_item_include file \.shtml$
mod_gzip_item_include file \.htm$
mod_gzip_item_include file \.html$
mod_gzip_item_include file \.txt$
mod_gzip_item_include file \.dat$
mod_gzip_item_include file \.php$
mod_gzip_item_include file \.pl$
mod_gzip_item_include file \.cgi$
# 圧縮しないファイルの指定
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude file \.css$
mod_gzip_item_exclude file \.js$
# サポートするHTTPプロトコル。1000ならHTTP/1.0以降、1001ならHTTP/1.1以降
mod_gzip_min_http 1001
</IfModule>


典型的な設定です。
もっと細かく設定したいという方はマニュアルを参照しましょう。

httpd.conf を設定したら、忘れずに Apacheを再起動します。

≫圧縮の確認

server-status が見られるなら、組み込まれたモジュール一覧の中に mod_gzip があるか見てみよう。

また、上記設定であれば、/var/log/httpd/gzip_log にログファイルが出来ているはずなので開いて見てみましょう。

(略) mod_gzip:OK In:13016 Out:5903: 55pct.
というような感じで
In:圧縮前サイズ Out:圧縮後サイズ 55pct.が圧縮率です。

OK というのはmod_gzipの動作ステータスで、圧縮を無事終了しましたということです。

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

≫参考にしたサイト



技林TOP > 自宅サーバ構築メモ > mod_gzip
(C) bayashi.net