いろいろ準備中

[Apache] mod_deflateでコンテンツをgzip圧縮して通信する

9月 9th, 2008 Posted in apache, web開発

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 deflate

DeflateFilterNoteの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%のサイズになりました、結構圧縮されていますね。
また、画像系のファイルは圧縮されていませんでした。

もしプロキシ経由でアクセスしている場合は設定がもう少し必要になる場合があります。

つづく

コメントを投稿する