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やJavaScript、CSS等のテキストを圧縮する設定を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%圧縮されたらしい。