[Apache] mod_deflateでコンテンツをgzip圧縮して通信する
mod_deflateを使って通信を圧縮する設定をします。
圧縮するコンテンツのタイプは、htmlとcss、javascriptを対象とします。
Apacheのコンパイル
Apacheのバージョンは2.2.9を使用
$ ./configure --enbale-deflate=shared $ make $ su # make install
httpd.confの編集
一番簡単な設定は以下の1行を追加するだけです。
AddOutputFilterByType DEFLATE text/html text/css application/x-javascript
特定のディレクトリ以下にだけ適用する場合は以下のように、
<directory "/path/to/htdocs"> ... AddOutputFilterByType DEFLATE text/html text/css application/x-javascript </directory>
もう少し細かく設定もできます。
例えば、ブラウザによってはgzip圧縮に対応していない場合があるので、それらのブラウザ(ユーザーエージェント)からのアクセスされた場合には圧縮しないように設定ような場合は、以下のようになります。
BrowserMatch ^MSIE [6-9] gzip BrowserMatch ^Moxilla/[5-9] gzip
続いて、正しく圧縮されているかどうかを確認するために、ログの設定を行います。
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 deflateDeflateFilterNoteのInputは圧縮前のバイト数、Outputは圧縮後のバイト数、Raitoは圧縮率(Input × Output × 100)をあらわします。
設定の詳細および、その他の設定はApacheのドキュメンテーションを参照してください。
設定できたか確認する
これで基本的な設定が終了しましたので、実際に圧縮されているか確認します。
Apacheを再起動後、設定をしたページにアクセスしてdeflate_logを確認します。
$ less /usr/local/apache2/log/deflate_log "GET / HTTP/1.1" 5464/44920 (12%) Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 "GET /favicon.ico HTTP/1.1" -/- (-%) Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 "GET /images/logo.gif HTTP/1.1" -/- (-%) Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 "GET /css/style.css HTTP/1.1" 2786/12699 (21%) Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 "GET /js/prototype.js HTTP/1.1" 22295/99938 (22%) Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 ...
ちゃんと圧縮されているようです。今回試したページでは元のサイズに対して、htmlが12%、cssが21%、javascriptが22%のサイズになりました、結構圧縮されていますね。
また、画像系のファイルは圧縮されていませんでした。
もしプロキシ経由でアクセスしている場合は設定がもう少し必要になる場合があります。