前書き
Mod_deflateは、Webサーバーからの出力をクライアントに送信する前に圧縮できるようにするApacheモジュールです。 サイトコンテンツのサイズが圧縮されると、サイズが小さくなり、クライアントはより高速にダウンロードできます。 これは、帯域幅が狭いクライアントだけでなく、サイトのパフォーマンスとページランクを評価する際に検索エンジンによっても考慮されます。
コンテンツの圧縮に加えて、mod_deflateは圧縮解除の目的にも使用できます。 この手法は、Apacheをリバースプロキシとして使用し、プロキシを通過するコンテンツをさらに処理する場合に適用できます。 ただし、この手法の使用は非常に限られています。 圧縮にmod_deflateを使用することに関する記事の焦点を維持します。
前提条件
このガイドはUbuntu 14.04でテストされています。 CentOS 7の場合は、this guideを確認してください。 モジュールのインストールと構成はOSまたはOSバージョンに依存しませんが、構成ファイルの場所はOSとそのバージョンによって異なる場合があります。
また、Apache 2.4.0以降を実行していることを前提としています。 Apacheをインストールするには、How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 14.04の記事のステップ1に従ってください。
このチュートリアルのすべてのコマンドは、非rootユーザーとして実行する必要があります。 コマンドにルートアクセスが必要な場合は、その前にsudo
が付きます。 まだ設定していない場合は、次のチュートリアルに従ってください:Initial Server Setup with Ubuntu 14.04。
インストール
mod_deflateは、Ubuntu 14.04のデフォルトのApacheインストールに含まれており、有効になっています。 これを確認するには、Apacheサーバー制御インターフェイスであるapachectl
を実行し、次のようにキーワードdeflate
のgrep
で出力をフィルタリングします。
apachectl -t -D DUMP_MODULES |grep deflate
[.note]#Note:apachectl
がパスにない場合は、コマンドへのフルパスを使用する必要がある場合があります:/usr/sbin/apachectl
。
#
mod_deflateがインストールされて有効になっている場合は、deflate_module (shared)
が表示されます。 これが表示されない場合は、次のトラブルシューティング手順を行ってください。
-
モジュールファイルがインストールされていることを確認します。 このファイルは、前述の前提条件に従ってすでにインストールされているはずのコア
apache2
パッケージの一部です。 デフォルトでは、/usr/lib/apache2/modules/mod_deflate.so
にあります。 また、Webサーバーはこのファイルを開くことができるはずです。 この目的のために、mod_deflate.so
には644などの誰でも読み取り可能な権限が必要です。 -
モジュールがロードされているかどうかを確認してください。
/etc/apache2/mods-available/deflate.load
へのシンボリックリンクであるモジュール構成ファイル/etc/apache2/mods-enabled/deflate.load
を開き、この行が存在し、コメントアウトされていないことを確認します。
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
[.note]#Note: Apacheの構成を変更する必要がある場合は、Apacheを再起動することを忘れないでください。 再起動コマンドはsudo apachectl restart
。
#です。
設定
mod_deflateの使用を開始するには、圧縮するファイルタイプを指定する必要があります。 一方では、プレーンテキスト形式は圧縮によってサイズを大幅に縮小できるため、HTML、CSS、またはJavaScriptファイルに適用するのが理にかなっています。 一方、Flashや画像などの多くのマルチメディア形式にはすでに圧縮が含まれており、追加の圧縮は無駄になります。
まず、ファイル/etc/apache2/mods-enabled/deflate.conf
のデフォルト構成を使用できます。これは/etc/apache2/mods-available/deflate.conf
へのシンボリックリンクです。
/etc/apache2/mods-enabled/deflate.conf
# these are known to be safe with MSIE 6
AddOutputFilterByType DEFLATE text/html text/plain text/xml
# everything else may cause problems with MSIE 6
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/xml
上記のコードは、ファイルが拡張子と一致する場合、.html
、.txt
、.xml
、.css
、.js
などの一般的なテキストファイル拡張子を意味します。 mod_deflateのdeflateアクションによって圧縮されます。 拡張子がmimeタイプによってどのようにマップされるかわからない場合は、ファイル/etc/mime.types
を確認してください。 サイト固有の拡張機能を追加することをお勧めします。
+ *Note:* In Ubuntu the Apache configuration is organized intuitively in multiple files. Also, configuration files are usually not enabled. For example, the modules configuration files reside in the directory `+/etc/apache2/mods-available/+`, e.g. `+/etc/apache2/mods-available/deflate.conf+`. A module configuration file is enabled only when a symlink to it is created in the directory `+/etc/apache2/mods-enabled/+` such as `+/etc/apache2/mods-enabled/deflate.conf+`. +
さらに、mod_deflateには重要な設定オプションがいくつかあります。
-
DeflateCompressionLevel
—適用される圧縮レベル。 デフォルトでは、このレベルは圧縮の最高レベルである9です。 1は最小の圧縮レベルです。 圧縮率を高くすると、サーバーのCPU使用率が高くなりますが、出力は最小になります。 -
DeflateMemLevel
—圧縮ライブラリが使用できるメモリzlibの量。 デフォルト値は9で、これも最高値です。 許可されるメモリを正確に計算するには、DeflateMemLevel
の値に16Kを掛ける必要があります。 -
DeflateWindowSize
—圧縮ウィンドウのサイズ。 デフォルトでは、可能な最大値の15です。 数値が大きいほど、圧縮レベルが高くなりますが、サーバーリソースが増えます。
ほとんどの場合、上記の値をデフォルトのままにしておくことができます。 ただし、mod_deflateを使用した後にサーバーのパフォーマンスが大幅に低下したと思われる場合は、次のように構成ファイル/etc/apache2/mods-enabled/deflate.conf
で低い値を構成できます。
DeflateCompressionLevel 1
上記により、圧縮レベルが低下し、ファイルが大きくなります。 ただし、mod_deflateはこの方法で使用するCPUが少なくなります。 このような変更を適用する場合は、Apacheを再起動してください。
テスト
mod_deflateをテストするにはさまざまな方法がありますが、最も簡単な方法は、非対話型ネットワークダウンローダーであるwgetを使用することです。 Ubuntu 14.04ドロップレットにまだインストールされていない場合は、コマンドsudo apt-get install wget
を使用してインストールできます。
テストには、少なくとも数百KBのテキストファイルが必要です。このファイルは、圧縮すると小さくなります。 このようなファイルが手元にない場合は、人気のあるJavaScriptライブラリであるJQueryをダウンロードして、サイトにアップロードできます。 ファイルをどこに置くかわからない場合は、Ubuntu 14.04では/var/www/html/
であるApacheのデフォルトのドキュメントルートにアップロードするだけです。 したがって、ファイルはデフォルトサイトのルートディレクトリで使用可能になります。
+ *Note:* In order for mod_deflate to compresses the output the client (usually the browser) has to support compression. If the client does not support compression the file will be sent as is. +
サンプルテストファイルがサイトにアップロードされたら、wget
を使用してダウンロードします。 このテストは、ローカルマシンまたはドロップレットから実行できます。 このような:
wget --header="Accept-Encoding: gzip" http:///jquery-1.11.3.js
上記の例では、Apacheサーバーからjquery-1.11.3.js
ファイルをダウンロードしています。 圧縮を利用するために、追加のwget
ヘッダー引数Accept-Encoding: gzip
を渡します。
上記の方法でダウンロードした場合、ファイルjquery-1.11.3.js
は83KBになります。 実際のところ、これは元のJavaScriptファイルとまったく同じではなく、クライアントが追加で抽出する必要があるため、クライアント側にもオーバーヘッドが発生します。 ただし、ネットワーク経由で転送されるサイズは、元のファイル(278K)よりも3倍以上小さい83KBになります。
ダウンロードしたファイルのサイズをLinuxコマンドで確認して、次のようにディレクトリの内容ls
を一覧表示することで、最初に上記の計算を確認できます。
ls -lah jquery-1.11.3.js
-rw-r--r-- 1 user user 83K Apr 28 12:20 jquery-1.11.3.js
次に、ls
コマンドを使用して、結果をサイトの元のファイルと再度比較できます。
ls -lah /var/www/html/jquery-1.11.3.js
-rw-r--r-- 1 apache apache 278K Apr 28 12:20 /var/www/html/jquery-1.11.3.js
結論
この記事とJQueryライブラリの実際の例からおわかりのように、Mod_deflateはサイトの帯域幅のニーズを大幅に削減するのに役立ちます。 サイトの最適化をさらに続行するには、Apache content cachingについてお読みください。これは、mod_deflateを有効にした後の次の論理的な手順です。