
実用 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のソース/ |
この後の作業は、「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/ |
| 注: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 |
1行目がモジュールを読み込む指定です。モジュールをApache本体に組み込んだ場合は、この指定は不要です。2行目は、サーバから転送するコンテンツに圧縮を適用する指定です。
特定のディレクトリに格納されているコンテンツに対してのみ適用させる場合は、<Location>や<Directory>ディレクティブを併用します。
<Directory "/パス/example/"> |
圧縮の程度を指定することもできます。「DeflateCompressionLevel」に対して、1〜9の値を設定します。
DeflateCompressionLevel 5 |
値が大きくなるほど圧縮率は大きくなりますが、その分CPUの負荷が高くなります。運用実態に合わせて徐々に値を上げるようにしましょう。
最低限の設定は完了ですが、圧縮転送が行われていることを確認するためにログを取る設定を追加します。通常のaccess_logやerror_logとは別に、新たなログをCustomLogを利用して収集することにします。CustomLogについては、機会があれば別の回で紹介します。
DeflateFilterNote Input instream |
圧縮比を表示させるため、「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 /> |
| 注:<Location>ディレクティブは必要がある場合のみ使用します。 |
|
2/3
|
|
||||||
|
||||||
| 連載 実用 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系列の新機能、インストール方法、国際化の現状を解説する |
|
|
TechTargetジャパン
- 新しい記事も入っていて安心しました (2012/2/7)
Linux Squareのアクセスランキングを公開します。定番の記事ばかりでなく、連載中の記事もよろしくお願いいたします - エラーメッセージをどう扱うか? (2012/2/2)
今回は、スクリプト実行時にエラーが発生したことを知らせるメッセージの扱い方を説明します - ファイルのアップロードを制限する (2012/1/30)
HTTPクライアントがアップロードしてくるファイルの扱いについて解説します。そもそも受け入れる必要があるのか? ということのほかにも、いろいろ設定が必要です - OSに付属するシェルスクリプトを読んで技術を盗む (2012/1/27)
シェルスクリプトマスターに近づくには、他人から技術を盗まなければならない。OS付属のスクリプトから技術を盗もう
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
