mod_deflateによるコンテンツ圧縮の設定

カテゴリ:Apache 2.2の設定
日時:2010/03/04 23:56

mod_deflateを利用すると、コンテンツをWebブラウザに転送する際にサーバ側で圧縮する。これにより、ネットワーク帯域を節約できる。

Gentoo Linuxでmod_deflateを使う場合は、Apacheをemergeする際に、/etc/make.confのAPACHE2_MODULESに
deflate
を指定しておく必要がある。

mod_deflateモジュールを組み込んだら、設定を行う。 まず、mod_deflateの設定ファイル(/etc/apache2/modules.d/00_mod_deflate.conf)を新規作成する。内容は以下の通り。
<IfModule deflate_module>
    DeflateCompressionLevel 6
    <Location /home/httpd>
     SetOutputFilter DEFLATE
        SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
        Header append Vary env=!dont-vary
     </Location>
    DeflateFilterNote Input instream
    DeflateFilterNote Output outstream
    DeflateFilterNote Ratio ratio
    LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%) %{User-agent}i$
    CustomLog /var/log/apache2/deflate_log deflate
</IfModule>
    <Location /home/httpd>
     SetOutputFilter DEFLATE
    </Location>
で、/home/httpd/以下をすべて圧縮する。ただし、
        SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
        Header append Vary env=!dont-vary
でGIF、JPEG、PNGファイルは対象外にしている。圧縮率は、
    DeflateCompressionLevel 6
で指定。値は1~9で、数字が大きいほど圧縮率が高くなるがCPU負荷も高くなる。

マニュアルでは、Netscape 4などコンテンツ圧縮に対応していない古いブラウザ用の設定も紹介されているが、当サイトでは指定していない。
    DeflateFilterNote Input instream
    DeflateFilterNote Output outstream
    DeflateFilterNote Ratio ratio
    LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%) %{User-agent}i$
    CustomLog /var/log/apache2/deflate_log deflate
はログの設定。mod_deflateの動作確認用。

設定が完了したら、
/etc/init.d/apache restart
でApacheを再起動し、Webサイトを適当に閲覧した後
# tail /var/log/apache2/deflate_log
でログを確認する。圧縮されているのが確認できたら、再び/etc/apache2/modules.d/00_mod_deflate.confを開き、ログ関連の行をコメントアウトしてApacheを再起動する。

ログ関連の行はそのままでも動作に支障はないが、ログを取得すると負荷が高くなる。必要のないログは止めた方がよい。