検索
連載

mod_deflateによるコンテンツの圧縮転送実用 Apache 2.0運用・管理術(4)(2/3 ページ)

サーバのマシン性能は十分でも、コンテンツの転送時間がボトルネックとなってパフォーマンスが出ない場合がある。このようなときの対処法として、コンテンツの圧縮転送がある。(編集部)

Share
Tweet
LINE
Hatena

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」オプションを追加します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

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

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

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

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

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

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

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

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

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

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

httpd.confの編集

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

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

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

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

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

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

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

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

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

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 圧縮比を表示させるため、「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タイプのコンテンツは圧縮されません。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

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

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

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る