Apache HTTPのレスポンスを圧縮して送信する

レスポンスを圧縮するためにはDeflateモジュールを使用するらしい。Apacheコンパイル時に--enable-deflateをつけてないと使えないんだけど、これをつけてなかったので調べてみた。

http://www.atmarkit.co.jp/flinux/rensai/apache2_04/apache04b.html
ここにどんぴしゃの内容があったので試してみたらすんなり出来ました。らっきー。

環境は以下の通り。
OS CentOS5.2
Apache 2.2.11

インストールはこうしていた。

# cd /usr/src
# wget http://ftp.kddilabs.jp/infosystems/apache/httpd/httpd-2.2.11.tar.gz
# tar xvzf httpd-2.2.11.tar.gz
# cd httpd-2.2.11
# ./configure --enable-ssl --enable-rewrite --enable-proxy --enable-proxy-ajp --enable-proxy-balancer --enable-dav --enable-dav-fs --enable-dav-lock --enable-headers
# make
# make install

Deflate使うって最初から分かってたら、./configureのオプションで--enable-deflateしておけばよい。

DeflateをApacheに組み込む

configureのときに--enable-deflateをつけていない場合、以下のように組み込む

# cd /usr/src/httpd-2.2.11/modules/filters
# /usr/local/apache2/bin/apxs -i -a -c mod_deflate.c

こんだけ、2行目を実行するとずらっとメッセージが出てくる。そのメッセージの最後2行はこんな感じ。

chmod 755 /usr/local/apache2/modules/mod_deflate.so
[activating module `deflate' in /usr/local/apache2/conf/httpd.conf]

/usr/local/apache2/modules/mod_deflate.soがDeflateモジュールの実体。
そして、httpd.confには以下の行が追加されているはず。
/usr/local/apache2/conf/httpd.conf

LoadModule deflate_module     modules/mod_deflate.so

Deflateの設定を行う

そして、Defalteモジュールを使ってHTMLやJavaScriptCSS等のテキストを圧縮する設定をhttpd.confに記述する。

# Deflate設定
AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript
# ... text/xml application/xml application/xhtml+xml text/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# Deflateが有効になっているか確認するログの出力
DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio
LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%) %{User-agent}i' deflate
CustomLog logs/deflate_log deflate

こんな感じで設定したら、Apacheを起動(再起動)する。
適当なURLにアクセスすると、/usr/local/apache2/log/deflate_logに以下のようなログが出てればOK。

"GET / HTTP/1.1" 40819/117424 (34%) Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NETCLR 3.5.30729)

おお。この例では、レスポンスされるデータは34%圧縮されたらしい。