序章

Mod_deflateは、クライアントに送信する前にWebサーバーからの出力を圧縮できるようにするApacheモジュールです。 サイトコンテンツのサイズが圧縮されると、そのサイズは小さくなり、クライアントはそれをより速くダウンロードできるようになります。 これは、帯域幅が狭いクライアントにとって価値があるだけでなく、サイトのパフォーマンスとそのページランクを評価するときに検索エンジンによって考慮されます。

コンテンツの圧縮に加えて、mod_deflateは非圧縮の目的にも使用できます。 この手法は、Apacheをリバースプロキシとして使用し、プロキシを通過するコンテンツをさらに処理する場合に適用できます。 ただし、この手法の用途は非常に限られています。 圧縮にmod_deflateを使用することに焦点を当てていきます。

前提条件

このガイドはCentOS7でテストされています。 モジュールのインストールと構成はOSまたはOSのバージョンに依存しませんが、構成ファイルの場所はOSとそのバージョンによって異なる場合があります。

また、Apache2.4.0以降を実行していることも前提としています。 Apacheをインストールするには、CentOSの記事にLinux、Apache、MySQL、PHP(LAMP)スタックをインストールする方法のステップ1に従ってください。

このチュートリアルのすべてのコマンドは、root以外のユーザーとして実行する必要があります。 コマンドにrootアクセスが必要な場合は、その前にsudoが付きます。 まだセットアップしていない場合は、次のチュートリアルに従ってください: CentOS7でのサーバーの初期セットアップ。

インストール

Mod_deflateは、CentOS7のデフォルトのApacheインストールに含まれていて有効になっています。 これを確認するには、Apache Server ControlInterfaceであるapachectlを実行し、次のようにキーワードdeflateに対してgrepで出力をフィルタリングします。

  1. apachectl -t -D DUMP_MODULES |grep deflate

mod_deflateがインストールされて有効になっている場合は、deflate_module (shared)が表示されます。 これが表示されない場合は、次のトラブルシューティング手順に従ってください。

  1. モジュールファイルがインストールされていることを確認します。 このファイルは、前述の前提条件に従ってすでにインストールされているはずのコアhttpdパッケージの一部です。 デフォルトでは、/etc/httpd/modules/mod_deflate.soにあります。 また、Webサーバーはこのファイルを開くことができるはずです。 この目的のために、mod_deflate.soには、755などの誰でも読み取り可能な権限が必要です。
  2. モジュールがロードされているかどうかを確認します。 Apache基本モジュール構成ファイル/etc/httpd/conf.modules.d/00-base.confを開き、この行が存在し、コメントアウトされていないことを確認します。
LoadModule deflate_module modules/mod_deflate.so

注: Apacheの構成を変更する必要がある場合は、Apacheを再起動することを忘れないでください。 再起動コマンドはsudo apachectl restartです。

構成

mod_deflateの使用を開始するには、圧縮するファイルの種類を指定する必要があります。 一方では、プレーンテキスト形式は圧縮によってサイズを大幅に縮小できるため、HTML、CSS、またはJavaScriptファイルに適用するのが理にかなっています。 一方、Flashや画像などの多くのマルチメディア形式にはすでに圧縮が含まれており、追加の圧縮は無駄になります。

mod_deflateを構成するには、サンプルコードを使用して新しい構成ファイル/etc/httpd/conf.d/mod_deflate.confを作成します。

/etc/httpd/conf.d/mod_deflate.conf
<filesMatch "\.(js|html|css)$">
    SetOutputFilter DEFLATE
</filesMatch>

上記のコードは、ファイルが拡張子.js.html、または.cssと一致する場合、標準のApache SetOutputFilterディレクティブによって圧縮(収縮)されることを意味します。 .txtなど、サイトにある他の同様のテキストファイル拡張子を追加できます。

注:上記のコードをメイン構成ファイル/etc/httpd/conf/httpd.confに配置できます。 ただし、このような特定の構成部分を別のファイルに分けることをお勧めします。 CentOS 7では、この目的のために、ディレクトリ/etc/httpd/conf.d/にある拡張子.confのファイルは、メインのApache構成ファイルの最後にあるディレクティブIncludeOptional conf.d/*.confのおかげで自動的にロードされます。

さらに、mod_deflateには、独自の重要な構成オプションがいくつかあります。

  • DeflateCompressionLevel-適用される圧縮レベル。 デフォルトでは、このレベルは9で、最高レベルの圧縮です。 1は最小レベルの圧縮です。 圧縮率を高くすると、サーバーのCPU使用率が高くなる代わりに、出力が最小になります。
  • DeflateMemLevel-圧縮ライブラリであるzlibが使用できるメモリの量。 デフォルト値は9で、これも最高値です。 許可されるメモリを正確に計算するには、DeflateMemLevelの値に16Kを掛ける必要があります。
  • DeflateWindowSize-圧縮ウィンドウのサイズ。 デフォルトでは、15の可能な最高値です。 数値が大きいほど圧縮レベルが高くなりますが、サーバーリソースが増えます。

ほとんどの場合、上記の値はデフォルトのままにしておくことができます。 ただし、mod_deflateを使用した後にサーバーのパフォーマンスが大幅に低下したと思われる場合は、構成ファイル/etc/httpd/conf.d/mod_deflate.confで次のように低い値を構成します。

DeflateCompressionLevel 1

上記の場合、圧縮レベルが下がり、ファイルが大きくなります。 ただし、mod_deflateはこの方法で使用するCPUが少なくなります。 このような変更を適用する場合は、必ずApacheを再起動してください。

テスト

mod_deflateをテストするにはさまざまな方法がありますが、最も簡単な方法は、非対話型ネットワークダウンローダーであるwgetを使用することです。 CentOS 7ドロップレットにまだインストールされていない場合は、コマンドsudo yum install -y wgetを使用してインストールできます。

テストには、少なくとも数百KBのテキストファイルが必要です。これは、圧縮すると小さくなるはずです。 このようなファイルが手元にない場合は、人気のあるJavaScriptライブラリであるJQueryをダウンロードしてサイトにアップロードできます。 ファイルを配置する場所がわからない場合は、CentOS7の/var/www/html/であるApacheのデフォルトのドキュメントルートにファイルをアップロードするだけです。 したがって、ファイルはデフォルトサイトのルートディレクトリで利用できるようになります。

注: mod_deflateが出力を圧縮するには、クライアント(通常はブラウザー)が圧縮をサポートしている必要があります。 クライアントが圧縮をサポートしていない場合、ファイルはそのまま送信されます。

サンプルテストファイルがサイトにアップロードされたら、wgetを使用してダウンロードします。 このテストは、ローカルマシンまたはドロップレットから実行できます。 このような:

  1. wget --header="Accept-Encoding: gzip" http://<your_server_ip>/jquery-1.11.3.js

上記の例では、Apacheサーバーからjquery-1.11.3.jsファイルをダウンロードしています。 圧縮を利用するために、追加のwgetヘッダー引数Accept-Encoding: gzipを渡します。

上記の方法でダウンロードした場合、ファイルjquery-1.11.3.jsは83KBになります。 実際のところ、これは元のJavaScriptファイルとまったく同じではなく、クライアントによって追加で抽出される必要があるため、クライアント側でもオーバーヘッドが発生します。 ただし、ネットワークを介して転送されるサイズは、元のファイル(278K)の3分の1よりも小さい83KBにすぎません。

ダウンロードしたファイルのサイズをLinuxコマンドで確認し、ディレクトリの内容lsを次のように一覧表示することで、最初に上記の計算を確認できます。

  1. ls -lah jquery-1.11.3.js
  2. -rw-r--r-- 1 user user 83K Apr 28 12:20 jquery-1.11.3.js

次に、lsコマンドを使用して、結果をサイトの元のファイルと再度比較できます。

  1. ls -lah /var/www/html/jquery-1.11.3.js
  2. -rw-r--r-- 1 apache apache 278K Apr 28 12:20 /var/www/html/jquery-1.11.3.js

結論

この記事とJQueryライブラリの実際の例からわかるように、Mod_deflateは、サイトに必要な帯域幅を大幅に減らすのに役立ちます。 サイトの最適化をさらに続行するには、 Apacheコンテンツキャッシュについてお読みください。これは、mod_deflateを有効にした後の次の論理的な手順です。