CentOS7にmod_deflateをインストールして設定する方法
序章
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
で出力をフィルタリングします。
- apachectl -t -D DUMP_MODULES |grep deflate
mod_deflateがインストールされて有効になっている場合は、deflate_module (shared)
が表示されます。 これが表示されない場合は、次のトラブルシューティング手順に従ってください。
- モジュールファイルがインストールされていることを確認します。 このファイルは、前述の前提条件に従ってすでにインストールされているはずのコア
httpd
パッケージの一部です。 デフォルトでは、/etc/httpd/modules/mod_deflate.so
にあります。 また、Webサーバーはこのファイルを開くことができるはずです。 この目的のために、mod_deflate.so
には、755などの誰でも読み取り可能な権限が必要です。 - モジュールがロードされているかどうかを確認します。 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
を作成します。
<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
を使用してダウンロードします。 このテストは、ローカルマシンまたはドロップレットから実行できます。 このような:
- 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を有効にした後の次の論理的な手順です。