Ubuntu14.04にmod_deflateをインストールして構成する方法
序章
Mod_deflateは、クライアントに送信する前にWebサーバーからの出力を圧縮できるようにするApacheモジュールです。 サイトコンテンツのサイズが圧縮されると、そのサイズは小さくなり、クライアントはそれをより速くダウンロードできるようになります。 これは、帯域幅が狭いクライアントにとって価値があるだけでなく、サイトのパフォーマンスとそのページランクを評価するときに検索エンジンによって考慮されます。
コンテンツの圧縮に加えて、mod_deflateは非圧縮の目的にも使用できます。 この手法は、Apacheをリバースプロキシとして使用し、プロキシを通過するコンテンツをさらに処理する場合に適用できます。 ただし、この手法の用途は非常に限られています。 圧縮にmod_deflateを使用することに焦点を当てていきます。
前提条件
このガイドはUbuntu14.04でテストされています。 CentOS 7については、このガイドを確認してください。 モジュールのインストールと構成はOSまたはOSのバージョンに依存しませんが、構成ファイルの場所はOSとそのバージョンによって異なる場合があります。
また、Apache2.4.0以降を実行していることも前提としています。 Apacheをインストールするには、 Linux、Apache、MySQL、PHP(LAMP)スタックをUbuntu 14.04にインストールする方法の記事のステップ1に従ってください。
このチュートリアルのすべてのコマンドは、root以外のユーザーとして実行する必要があります。 コマンドにrootアクセスが必要な場合は、その前にsudo
が付きます。 まだセットアップしていない場合は、次のチュートリアルに従ってください: Ubuntu14.04を使用したサーバーの初期セットアップ。
インストール
Mod_deflateは、Ubuntu14.04のデフォルトのApacheインストールに含まれていて有効になっています。 これを確認するには、Apache Server ControlInterfaceであるapachectl
を実行し、次のようにキーワードdeflate
に対してgrep
で出力をフィルタリングします。
- apachectl -t -D DUMP_MODULES |grep deflate
**注:** 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
注: Apacheの構成を変更する必要がある場合は、Apacheを再起動することを忘れないでください。 再起動コマンドはsudo apachectl restart
です。
構成
mod_deflateの使用を開始するには、圧縮するファイルの種類を指定する必要があります。 一方では、プレーンテキスト形式は圧縮によってサイズを大幅に縮小できるため、HTML、CSS、またはJavaScriptファイルに適用するのが理にかなっています。 一方、Flashや画像などの多くのマルチメディア形式にはすでに圧縮が含まれており、追加の圧縮は無駄になります。
まず、ファイル/etc/apache2/mods-enabled/deflate.conf
のデフォルト構成を使用できます。これは、/etc/apache2/mods-available/deflate.conf
へのシンボリックリンクです。
<IfModule mod_deflate.c>
<IfModule mod_filter.c>
# 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
</IfModule>
</IfModule>
上記のコードは、ファイルが拡張子と一致する場合、.html
、.txt
、.xml
、.css
、/etc/mime.types
を確認してください。 サイトに固有の拡張機能をさらに追加することをお勧めします。
<$> ノート: Ubuntuでは、Apache構成は複数のファイルに直感的に整理されています。 また、構成ファイルは通常有効になっていません。 たとえば、モジュール構成ファイルはディレクトリ/etc/apache2/mods-available/
にあります。 /etc/apache2/mods-available/deflate.conf
。 モジュール構成ファイルは、/etc/apache2/mods-enabled/deflate.conf
などのディレクトリ/etc/apache2/mods-enabled/
にシンボリックリンクが作成されている場合にのみ有効になります。 <$>
さらに、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をダウンロードしてサイトにアップロードできます。 ファイルを配置する場所がわからない場合は、Ubuntu14.04の/var/www/html/
であるApacheのデフォルトのドキュメントルートにファイルをアップロードするだけです。 したがって、ファイルはデフォルトサイトのルートディレクトリで利用できるようになります。
<$> ノート: mod_deflateが出力を圧縮するには、クライアント(通常はブラウザー)が圧縮をサポートしている必要があります。 クライアントが圧縮をサポートしていない場合、ファイルはそのまま送信されます。 <$>
サンプルテストファイルがサイトにアップロードされたら、wget
を使用してダウンロードします。 このテストは、ローカルマシンまたはドロップレットから実行できます。 このような:
- 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
を次のように一覧表示することで、最初に上記の計算を確認できます。
- 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コンテンツキャッシュについてお読みください。これは、mod_deflateを有効にした後の次の論理的な手順です。