実用 Apache 2.0運用・管理術

第4回 mod_deflateによるコンテンツの圧縮転送 

鶴長 鎮一(book@tsurunaga.jp)
2005/10/7

mod_deflateモジュールのインストール

 前述したとおり、Apache 2.0でコンテンツの圧縮転送を行うには、mod_deflateモジュールを使用します。mod_deflateモジュールのインストール方法は、以下の3種類に大別できます。各自やりやすい方法でインストールしてください。

RPMによるインストール

 Red Hat Linux、Fedora Core、SUSE LINUX、Turbolinuxなど、RPMパッケージでApacheをインストールした場合、mod_deflate.soは標準でインストールされています。Red Hat Linux、Fedora Core、Turbolinuxは「/usr/lib/httpd/modules/」、SUSE LINUXは「/usr/lib/apache2/」がモジュールのインストール先です。

 これ以外のディストリビューションでモジュールが見つからない場合は、「ソースからインストール(DSOによる動的組み込みの場合)」を参照ください。モジュールインストール後の作業は、「httpd.confの編集」に続きます。

ソースからインストール(Apacheに組み込む場合)

 Apacheのインストールを最初からやり直すことで、Apache本体へmod_deflateモジュールを組み込むことができます。Apache本体に組み込むと、モジュールのロードにかかる時間を節約できます。

 Apache本体に組み込むには、Apacheのconfigure実行時に「--enable-deflate」オプションを追加します。

# cd /Apacheのソース/
# ./configure --enable-deflate
# make
# make install

 この後の作業は、「httpd.confの編集」に続きます。

ソースからインストール(DSOによる動的組み込みの場合)

 DSO(Dynamic Shared Object:Apacheの基本インストールの「DSOとapxs」参照)を利用すれば、インストール済みのApacheにmod_deflateモジュールを追加することができます。

 DSOを利用してモジュールを組み込む場合は、まずmod_deflate.soファイルを作成してインストールします。mod_deflate.soのソースはApacheソースの中のmodules/filters/にあります。そのディレクトリでapxsコマンドを実行します。

# cd /Apacheのソース/modules/filters/
# /usr/local/apache2/bin/apxs -i -a -c mod_deflate.c
注:apxsのパスは適宜変更(以下同)。

 apxsコマンドに「-i」「-a」オプションを追加することで、make後にモジュールを規定の場所に移動し、httpd.confにモジュールをロードする設定が追加されます。「-c」オプションは、モジュールのソースファイルを指定します。

 この後「httpd.confの編集」の作業を行うのですが、以下のようなメッセージが出力されてモジュールの組み込みに失敗する場合があります。

Cannot load /usr/local/apache2/modules/mod_deflate.so into server: /usr/local/apache2/modules/mod_deflate.so: undefined symbol: deflate

 この場合は、mod_deflate.soに必要なライブラリを静的に組み込む必要があります。大抵はzlibを取り込むことで解決します。モジュール作成時にzlibを組み込むには、「-lz」オプションを追加します。

# /usr/local/apache2/bin/apxs -i -a -c mod_deflate.c -lz

httpd.confの編集

 次に、httpd.confでモジュールの読み込みとコンテンツ圧縮の設定を行います。

LoadModule deflate_module modules/mod_deflate.so
SetOutputFilter DEFLATE

 1行目がモジュールを読み込む指定です。モジュールをApache本体に組み込んだ場合は、この指定は不要です。2行目は、サーバから転送するコンテンツに圧縮を適用する指定です。

 特定のディレクトリに格納されているコンテンツに対してのみ適用させる場合は、<Location>や<Directory>ディレクティブを併用します。

<Directory "/パス/example/">
SetOutputFilter DEFLATE
</Directory>

 圧縮の程度を指定することもできます。「DeflateCompressionLevel」に対して、1〜9の値を設定します。

DeflateCompressionLevel 5

 値が大きくなるほど圧縮率は大きくなりますが、その分CPUの負荷が高くなります。運用実態に合わせて徐々に値を上げるようにしましょう。

 最低限の設定は完了ですが、圧縮転送が行われていることを確認するためにログを取る設定を追加します。通常のaccess_logやerror_logとは別に、新たなログをCustomLogを利用して収集することにします。CustomLogについては、機会があれば別の回で紹介します。

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」は圧縮後のバイトカウント、「Ratio」は圧縮率(Output / Input × 100)の指定です。DeflateFilterNoteで使用可能になった値を「LogFormat」で書式整形し、「CustomLog」でファイル出力を行います。また、ログ出力の際にWebブラウザ名を表示させるように、「%{User-agent}i」を加えます。

 以上でmod_deflateの基本設定は完了です。

圧縮処理の制御

 最初に述べたとおり、mod_deflateによるコンテンツ圧縮を行う場合、コンテンツ圧縮に対応したWebブラウザでなければコンテンツを正しく表示できなくなります。FirefoxやInternet Explorerなど、PC用の主要なWebブラウザの多くがHTTP 1.1に準拠しており、コンテンツ圧縮にも対応しています。しかし、非対応のWebブラウザも存在します。

 また、HTMLファイルなどのテキストデータは圧縮効果が期待できますが、GIFやJPEGなどの画像データはすでに圧縮されているため、あまり効果は見込めません。逆に、CPUが無駄に消費されます。

 圧縮転送を行う際は、クライアント側のWebブラウザや送信するコンテンツの種類に応じて機能を無効化するのが効果的です。

MIMEタイプ指定で特定のファイル形式のみを圧縮

 コンテンツの種類(ファイル形式)を見分けるためにMIMEタイプを利用し、圧縮を行うコンテンツを個別に指定します。指定しないMIMEタイプのコンテンツは圧縮されません。

AddOutputFilterByType DEFLATE text/html text/plain text/xml

Webブラウザと非圧縮コンテンツの指定

 以下の例は、アクセスがあった際にコンテンツを圧縮して送信するWebブラウザをMozilla系(ただしNetscape Navigator 4.0xは除外)とInternet Explorerに限定しています。さらに、拡張子が「.gif」「.jpeg」「.jpg」「.png」のファイルを圧縮対象から除外しています。Webブラウザの識別には、「BrowserMatch」を使用しています。

<Location />
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
</Location>
注:<Location>ディレクティブは必要がある場合のみ使用します。

2/3

Index
実用 Apache 2.0運用・管理術
 第4回 mod_deflateによるコンテンツの圧縮転送
  Page 1
 回線のボトルネック解消
  mod_deflateモジュールのメリット/デメリット
  回線ボトルネックの見極め
  Page 2
 mod_deflateモジュールのインストール
  RPMによるインストール
  ソースからインストール(Apacheに組み込む場合)
  ソースからインストール(DSOによる動的組み込みの場合)
 httpd.confの編集
  圧縮処理の制御
  Page 3
 mod_deflateの動作確認

連載 実用 Apache 2.0運用・管理術


 Linux Squareフォーラム サーバ構築・運用関連記事
連載:Heartbeatでかんたんクラスタリング(連載中)
オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します
特集:Apache 2.2でWebサイトをパフォーマンスアップ!
最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する
連載:実用 Apache 2.0運用・管理術(全8回)
本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える
連載:実用 BIND 9で作るDNSサーバ(全15回)
本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく
連載:実用qmailサーバ運用・管理術(全14回)
本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで
特集:Samba 3.0の全貌 改訂版
Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

TechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ



- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH